内部で「ls」を呼び出して出力をファイルに保存する Perl スクリプトを作成しようとしています。ファイルをページ単位で画面に表示し、ユーザーがキーを押して次のページに移動できるようにしますか?
何か案は?ありがとう
これまでのところ、私はこれを持っています:
#!/usr/bin/perl
$command = system("ls /bin/usr/account\ users/");
コマンドの出力を$commandwantsに保存するには
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>) { ... }