内部调用Linux命令并将输出保存到文件的Perl脚本?

时间:2012-08-04 13:07:31

标签: linux perl

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

有什么想法吗? 感谢

到目前为止我有这个:

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

3 个答案:

答案 0 :(得分: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,但无论如何全部大写这样的单词在任何情况下都是常规的。

答案 1 :(得分: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;
  }
}

答案 2 :(得分:0)

您可以使用以下命令来查看system

ps aux >/tmp/myfile

或者,如果你想在Perl中处理它,比如:

open (INSTREAM, "ps aux |");

然后你可以阅读任何其他“文件”:

while (<INSTREAM>) { ... }