我正在尝试编写一个内部调用“ls”的Perl脚本并将输出保存到文件中。在页面上以页面显示文件,允许用户按一个键进入下一页?
有什么想法吗? 感谢
到目前为止我有这个:
#!/usr/bin/perl
$command = system("ls /bin/usr/account\ users/");
答案 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>) { ... }