-6

我正在尝试编写一个内部调用“ls”并将输出保存到文件的 Perl 脚本。在屏幕上分页显示文件,允许用户按一个键转到下一页?

有任何想法吗?谢谢

到目前为止,我有这个:

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

3 回答 3

3

将命令的输出保存到$command想要

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(相当于反引号)从命令获取输出并将其写入文件。

然后重新打开同一个文件进行读取,一次将二十行发送到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 回答