相关疑难解决方法(0)

Perl的反引号,系统和exec有什么区别?

有人可以帮帮我吗?在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命令吗?

perl

231
推荐指数
4
解决办法
21万
查看次数

管道命令输出到tee但也保存命令的退出代码

我有一个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但仍然将输出传递给日志文件?

bash shell pipe sh tee

150
推荐指数
3
解决办法
5万
查看次数

如何将空参数传递给从主Perl脚本调用的Perl脚本[backtics]

我想调用一个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)

unix perl

0
推荐指数
1
解决办法
429
查看次数

我的Perl脚本运行一个系统命令,我希望输出作为脚本的其余部分的字符串,如何实现?

例如,如果我的脚本如下:

#! /bin/perl
use strict;
use warnings;

system('echo schwifty')
Run Code Online (Sandbox Code Playgroud)

- 我可以将我的终端(schwifty)上的输出变成一个字符串,我可以继续使用我的脚本吗?

注意:"echo"仅作为示例给出我正在使用其他打印到屏幕的命令.

perl system

-1
推荐指数
1
解决办法
197
查看次数

标签 统计

perl ×3

bash ×1

pipe ×1

sh ×1

shell ×1

system ×1

tee ×1

unix ×1