当前位置:  开发笔记 > 编程语言 > 正文

Perl的system()如何打印它正在运行的命令?

如何解决《Perl的system()如何打印它正在运行的命令?》经验,为你挑选了3个好方法。

在Perl中,您可以使用system()或``(反引号)执行系统命令.您甚至可以将命令的输出捕获到变量中.但是,这会在后台隐藏程序执行,以便执行脚本的人无法看到它.

通常这很有用,但有时我想看看幕后发生了什么.如何将所执行的命令打印到终端,并将这些程序的输出打印到终端?这.bat相当于"@echo on".



1> Rudd Zwolins..:

我不知道有任何默认的方法,但你可以定义一个子程序来为你做:

sub execute {
    my $cmd = shift;
    print "$cmd\n";
    system($cmd);
}

my $cmd = $ARGV[0];
execute($cmd);

然后看看它在行动:

pbook:~/foo rudd$ perl foo.pl ls
ls
file1   file2   foo.pl



2> Daniel Fone..:

据我所知,system()将打印命令的结果,但不会分配它.例如.

[daniel@tux /]$ perl -e '$ls = system("ls"); print "Result: $ls\n"'
bin   dev  home  lost+found  misc  net  proc  sbin     srv  System  tools  var
boot  etc  lib   media       mnt   opt  root  selinux  sys  tmp     usr
Result: 0

反引号将捕获命令的输出而不是打印它:

[daniel@tux /]$ perl -e '$ls = `ls`; print "Result: $ls\n"'
Result: bin
boot
dev
etc
home
lib

等等...

更新:如果你想打印命令的名称是system()'d',我认为陆克文的方法很好.在此重复进行整合:

sub execute {
    my $cmd = shift;
    print "$cmd\n";
    system($cmd);
}

my $cmd = $ARGV[0];
execute($cmd);



3> mk...:

请改用open.然后,您可以捕获命令的输出.

open(LS,"|ls");
print LS;

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有