在bash脚本中将SSH输出捕获为变量

And*_*ang 17 ssh bash stdout

在编写bash脚本时,我一直在努力解决这个问题.基本上,我想测量远程服务器上程序的时间,所以我使用命令: /usr/bin/time -f %e sh -c "my command > /dev/null 2>&1"执行程序.但是,似乎我无法将命令(SSH)的输出捕获到变量.实际上,结果(时间)一直打印到stdout.

完整的代码是:

respond=$(ssh ${fromNode} /usr/bin/time "-f" "%e" "'sh' '-c' 'virsh migrate --live ${VM} qemu+ssh://${toNode}/system --verbose > /dev/null 2>&1'")
Run Code Online (Sandbox Code Playgroud)

响应的值只是空的,尽管时间打印到标准输出.

Rog*_*ach 34

"time"命令将结果打印到stderr,而不是stdout.因此,它不会通过管道传输到您的变量中.

您应该将stderr重新路由到stdout以实现您想要的:

 result=$(ssh host time "command" 2>&1)
Run Code Online (Sandbox Code Playgroud)

您的完整代码可能如下所示:

 respond=$(ssh ${fromNode} /usr/bin/time "-f" "%e" "'sh' '-c' 'virsh migrate --live ${VM} qemu+ssh://${toNode}/system > /dev/null 2>&1'" 2>&1)
Run Code Online (Sandbox Code Playgroud)