内部で「ls」を呼び出して出力をファイルに保存する Perl スクリプトを作成しようとしています。ファイルをページ単位で画面に表示し、ユーザーがキーを押して次のページに移動できるようにしますか?
何か案は?ありがとう
これまでのところ、私はこれを持っています:
#!/usr/bin/perl
$command = system("ls /bin/usr/account\ users/");
コマンドの出力を$command
wantsに保存するには
my $command = `ps aux`;
または、おそらくより良い、
my @command = `ps aux`;
後者は、コマンドの出力の各行をリストの個別の要素として保存します。その後、内容を表示したり、内容をファイルに書き込んだり、表示と書き込みの両方を好きなように$command
行うことができます。@command
ファイルに書き込むには、
my $filename = "MY_FILENAME";
# ...
open FILE, '>>', $filename;
print FILE @command;
close FILE;
ファイルに追加するのではなく上書きする場合は、'>'
代わりに使用できます。'>>'
の代わりに任意の単語を使用できますがFILE
、そのような単語をすべて大文字にすることは、いずれの場合でも慣習的です。
書き直そうとしているようですls | more
。本当にこれを行う必要がありますか?
以下のプログラムはtemp.txt
、書き込み用にファイルを開きます。次に、qx
(バックティックに相当する) を使用して、コマンドから出力を取得し、それをファイルに書き込みます。
次に、同じファイルが読み取り用に再度開かれ、一度に 20 行が に送信されSTDOUT
ます。
キーボードからの文字 IO を許可するために、読み取りモードは 3 に設定されReadKey
、次のキー押下を取得するために呼び出されます。これらの呼び出しでは、プログラムの先頭にあるステートメントでTerm::ReadKey
モジュールを指定する必要があります。use
これはコアモジュールであるため、インストールする必要はありません
use strict;
use warnings;
use Term::ReadKey;
open my $fh, '>', 'temp.txt' or die $!;
print $fh qx(ls /bin/usr/account/users/);
open $fh, '<', 'temp.txt' or die $!;
ReadMode(3);
my $n = 20;
while (<$fh>) {
print;
if (--$n == 0) {
print "-- More --";
ReadKey(0);
$n += 20;
}
}
system
次のようなコマンドを使用して調べることができます。
ps aux >/tmp/myfile
または、Perl で処理する場合は、次のようにします。
open (INSTREAM, "ps aux |");
そして、他の「ファイル」でそれを読むことができます:
while (<INSTREAM>) { ... }