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