-6

内部で「ls」を呼び出して出力をファイルに保存する Perl スクリプトを作成しようとしています。ファイルをページ単位で画面に表示し、ユーザーがキーを押して次のページに移動できるようにしますか?

何か案は?ありがとう

これまでのところ、私はこれを持っています:

#!/usr/bin/perl
$command = system("ls /bin/usr/account\ users/");
4

3 に答える 3

3

コマンドの出力を$commandwantsに保存するには

my $command = `ps aux`;

または、おそらくより良い、

my @command = `ps aux`;

後者は、コマンドの出力の各行をリストの個別の要素として保存します。その後、内容を表示したり、内容をファイルに書き込んだり、表示と書き込みの両方を好きなように$command行うことができます。@command

ファイルに書き込むには、

my $filename = "MY_FILENAME";
# ...
open FILE, '>>', $filename;
print FILE @command;
close FILE;

ファイルに追加するのではなく上書きする場合は、'>'代わりに使用できます。'>>'の代わりに任意の単語を使用できますがFILE、そのような単語をすべて大文字にすることは、いずれの場合でも慣習的です。

于 2012-08-04T13:15:26.823 に答える
2

書き直そうとしているようです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;
  }
}
于 2012-08-04T17:36:03.363 に答える
0

system次のようなコマンドを使用して調べることができます。

ps aux >/tmp/myfile

または、Perl で処理する場合は、次のようにします。

open (INSTREAM, "ps aux |");

そして、他の「ファイル」でそれを読むことができます:

while (<INSTREAM>) { ... }
于 2012-08-04T13:17:39.983 に答える