有没有办法more
在 perl 脚本中使用该命令?有一个文件,我想打印它的内容,但由于有很多行,我想用more
. 我尝试more
输入反引号,但它没有用:
open(FILE,'/opt/myfile' ) or die("Could not open file.");
`more /opt/myfile`;
有没有办法more
在 perl 脚本中使用该命令?有一个文件,我想打印它的内容,但由于有很多行,我想用more
. 我尝试more
输入反引号,但它没有用:
open(FILE,'/opt/myfile' ) or die("Could not open file.");
`more /opt/myfile`;
`more /opt/myfile`
意味着将命令的输出捕获more
到一个字符串中,该字符串被丢弃(您通常将输出存储在变量中或将其传递给函数)。当它的输出没有连接到终端时,more
相当于cat
,它没有做任何有用的事情。
要在 Perl 中运行子进程而不捕获其输出,请使用该system
函数。
system('more', '/opt/myfile');
请注意,您应该传递一个包含命令及其参数的列表,而不仅仅是一个字符串。如果您将单个字符串传递给system
,它将被传递给 shell,该 shell 将扩展文件名中的任何特殊字符。例如,system('more /opt/myfile')
可以工作,但system('more /opt/$(rm -rf ~)')
会删除您的所有文件。如果您传递多个参数,则不涉及 shell:system('more', '/opt/$(rm -rf ~)')
调用more
那个奇怪命名的文件。
+
如果文件名以or开头存在任何风险,请在文件名之前-
传递--
,以避免将其解释为选项。
而不是 call more
,您应该检查PAGER
环境变量,如果已定义,则调用它。$PAGER
是事实上的标准寻呼机。如果变量未定义,在这个千年中,您应该默认为less
(如果您偏执,则默认为less
如果它存在,more
否则默认为)。
my $pager = $ENV{PAGER};
if (!defined $pager || $pager eq '') {
$pager = 'less';
}
system($pager, '--', '/opt/myfile');
只需使用系统命令:
system('more thefile');
我可能会打开一个通往寻呼机的管道,如下所示:
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;'