执行bash命令和捕获输出
问题描述:
我有我在Perl中执行如下执行bash命令和捕获输出
@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);
但这并不能让我得到的输出给一个字符串变量bash命令。 如果我执行与反引号
$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
('`我能做些什么来执行命令,并在一个变量得到的结果?
答
可以使用的一个确切samething通常CPAN模块,如IPC::System::Simple
具有capture()
方法;或者更可能将要存在的IPC::Open2
你backticsk问题是,你并没有引述diff命令,从而使它成为一个争论打坏。 :
BREAKS: bash -c diff <(cmd2) <(cmd1)
GOOD : bash -c "diff <(cmd2) <(cmd1)"
您的代码将每个“单词”视为系统shell的单独参数(而不是bash),例如,这与致电system("bash", "-c", "diff", " <(ssh" ...)
什么是示例代码和反引号的确切错误? – DVK 2012-08-14 13:19:28
编辑成问题 – Aks 2012-08-14 13:23:01