有人可以帮帮我吗?在Perl中,有什么区别:
exec "command";
Run Code Online (Sandbox Code Playgroud)
和
system("command");
Run Code Online (Sandbox Code Playgroud)
和
print `command`;
Run Code Online (Sandbox Code Playgroud)
还有其他方法来运行shell命令吗?
我有一个shell脚本,我在其中包装一个命令(mvn clean install),将输出重定向到日志文件.
#!/bin/bash
...
mvn clean install $@ | tee $logfile
echo $? # Does not show the return code of mvn clean install
Run Code Online (Sandbox Code Playgroud)
现在,如果mvn clean install失败并出现错误,我希望我的包装器shell脚本也会因该错误而失败.但是因为我将所有输出都传递给tee,所以我无法访问返回代码mvn clean install,所以当我$?之后访问时,它总是0(因为tee成功).
我尝试让命令将错误输出写入单独的文件并在之后检查,但mvn的错误输出始终为空(看起来它只写入stdout).
如何保留返回代码mvn clean install但仍然将输出传递给日志文件?
我想调用一个perl脚本(B.pl),它将通过传递多个可选参数来列出主要perl脚本(A.pl)中远程服务器上可用的文件。
由于参数是可选的,因此如果我使用反引号,则会将参数分配给B.pl中的错误变量。
如果我使用的@list=system(B.pl, argv0, argv1, argv2);话,尽管某些参数是undef的,但它已在B.pl中正确分配,但STDOUT未在调用脚本中分配给@list。
我是perl的新手,请在这种情况下进行指导。有没有办法通过反引号传递空参数?
在A.pl中:
my @filelist = system( B.pl, $argv0, $argv1, $argv2, $argv3);
my @filelist1 = `B.pl $argv0 $argv1 $argv2 $argv3`;
Run Code Online (Sandbox Code Playgroud)
在B.pl中:
my $loc = uc( $ARGV[0] );
my $msk = uc( $ARGV[1] );
my $usr = $ARGV[2];
my $usr1 = $ARGV[3];
Run Code Online (Sandbox Code Playgroud) 例如,如果我的脚本如下:
#! /bin/perl
use strict;
use warnings;
system('echo schwifty')
Run Code Online (Sandbox Code Playgroud)
- 我可以将我的终端(schwifty)上的输出变成一个字符串,我可以继续使用我的脚本吗?
注意:"echo"仅作为示例给出我正在使用其他打印到屏幕的命令.