我正在尝试编写一个内部调用“ls”并将输出保存到文件的 Perl 脚本。在屏幕上分页显示文件,允许用户按一个键转到下一页?
有任何想法吗?谢谢
到目前为止,我有这个:
#!/usr/bin/perl
$command = system("ls /bin/usr/account\ users/");
将命令的输出保存到$command
想要
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
(相当于反引号)从命令获取输出并将其写入文件。
然后重新打开同一个文件进行读取,一次将二十行发送到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>) { ... }