有没有办法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;'