首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >perl中的"more“命令

perl中的"more“命令
EN

Stack Overflow用户
提问于 2012-07-24 17:05:12
回答 3查看 1.2K关注 0票数 2

有没有办法在perl脚本中使用more命令?有一个文件,我想打印它的内容,但是因为有很多行,所以我想用more打印它。我试着把more放在反引号里,但不起作用:

代码语言:javascript
复制
open(FILE,'/opt/myfile' ) or die("Could not open  file.");
`more /opt/myfile`;
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-24 17:17:58

只需使用系统命令:

代码语言:javascript
复制
system('more thefile');
票数 4
EN

Stack Overflow用户

发布于 2012-07-25 08:16:43

`more /opt/myfile`意味着将more命令的输出捕获到一个字符串中,该字符串将被丢弃(通常将输出存储在一个变量中或将其传递给一个函数)。当它的输出没有连接到终端时,more等同于cat,它不会做任何有用的事情。

要在Perl中运行子进程而不捕获其输出,请使用system函数。

代码语言:javascript
复制
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 )。

代码语言:javascript
复制
my $pager = $ENV{PAGER};
if (!defined $pager || $pager eq '') {
    $pager = 'less';
}
system($pager, '--', '/opt/myfile');
票数 6
EN

Stack Overflow用户

发布于 2012-07-24 17:25:24

我可能会打开一个通向寻呼机的管道,就像这样:

代码语言:javascript
复制
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;'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11642909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档