有没有办法在perl脚本中使用more命令?有一个文件,我想打印它的内容,但是因为有很多行,所以我想用more打印它。我试着把more放在反引号里,但不起作用:
open(FILE,'/opt/myfile' ) or die("Could not open file.");
`more /opt/myfile`;发布于 2012-07-24 17:17:58
只需使用系统命令:
system('more thefile');发布于 2012-07-25 08:16:43
`more /opt/myfile`意味着将more命令的输出捕获到一个字符串中,该字符串将被丢弃(通常将输出存储在一个变量中或将其传递给一个函数)。当它的输出没有连接到终端时,more等同于cat,它不会做任何有用的事情。
要在Perl中运行子进程而不捕获其输出,请使用system函数。
system('more', '/opt/myfile');请注意,您应该传递一个包含命令及其参数的列表,而不仅仅是一个字符串。如果将单个字符串传递给system,则会将其传递给shell,shell将扩展文件名中的任何特殊字符。例如,system('more /opt/myfile')可以工作,但system('more /opt/$(rm -rf ~)')会删除所有文件。如果传递多个参数,就不会涉及外壳程序:system('more', '/opt/$(rm -rf ~)')会对这个名称奇怪的文件调用more。
如果存在文件名以+或-开头的风险,请在文件名之前传递--,以避免将其解释为选项。
您应该检查PAGER环境变量,并在定义了该变量的情况下调用它,而不是调用more。$PAGER是事实上的标准寻呼机。如果没有定义这个变量,在这个千年中,您应该缺省为less (如果您是偏执狂,如果它存在,则缺省为less,否则缺省为more )。
my $pager = $ENV{PAGER};
if (!defined $pager || $pager eq '') {
$pager = 'less';
}
system($pager, '--', '/opt/myfile');发布于 2012-07-24 17:25:24
我可能会打开一个通向寻呼机的管道,就像这样:
open(FILE, "/opt/myfile") or die("Could not open file.");
open(PIPE, "| more") or die("Could not open pipe");
while(<FILE>) {
print PIPE;
}
close P;
close FILE;'https://stackoverflow.com/questions/11642909
复制相似问题