在Perl中,您可以使用system()或``(反引号)执行系统命令.您甚至可以将命令的输出捕获到变量中.但是,这会在后台隐藏程序执行,以便执行脚本的人无法看到它.
通常这很有用,但有时我想看看幕后发生了什么.如何将所执行的命令打印到终端,并将这些程序的输出打印到终端?这.bat
相当于"@echo on".
我不知道有任何默认的方法,但你可以定义一个子程序来为你做:
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
据我所知,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);
请改用open.然后,您可以捕获命令的输出.
open(LS,"|ls"); print LS;