我有一个bash命令我在perl中执行如下
@args = ( "bash" , "-c", "diff <(ssh -o \"StrictHostKeyChecking no\" user-db01 'mysql -uuser -ppass --execute=\"show databases\"') <(ssh -o \"StrictHostKeyChecking no\" user-db02 'mysql -uuser -ppass --execute=\"show databases\"')");
system(@args);
但这并不允许我将输出转换为字符串变量。 如果我用反引号执行完全相同的东西
$cmd = "bash -c diff <(ssh -o \"StrictHostKeyChecking no\" user-db01 'mysql -uuser -ppass --execute=\"show databases\"') <(ssh -o \"StrictHostKeyChecking no\" user-db02 'mysql -uuser -ppass --execute=\"show databases\"')";
my $res = `$cmd`;
抛出错误sh: -c: line 0: syntax error near unexpected token
(&#39;`我该怎么做才能执行命令并将结果输入变量?
答案 0 :(得分:2)
您可以使用常用的CPAN模块之一,例如IPC::System::Simple
具有capture()
方法的IPC::Open2
;或者更有可能存在的{{3}}。
你的backticsk问题是你没有引用diff命令,因此把它作为bash的参数:
BREAKS: bash -c diff <( cmd2 ) <( cmd1 )
GOOD : bash -c "diff <( cmd2 ) <( cmd1 )"
您的代码将每个“单词”视为系统shell的单独参数(不是bash),例如:它与调用system("bash", "-c", "diff", " <(ssh" ...)