在编写 bash 脚本时,我一直在努力解决这个问题。
基本上,我想测量远程服务器上程序的时间,所以我使用命令:
/usr/bin/time -f %e sh -c "my command >/dev/null 2>&1"
执行程序。
但是,似乎我根本无法将命令 (SSH) 的输出捕获到变量。事实上,结果(时间)一直被打印到标准输出。
完整代码为:
respond=$(ssh ${fromNode} /usr/bin/time "-f" "%e" "'sh' '-c' 'virsh migrate --live ${VM} qemu+ssh://${toNode}/system --verbose > /dev/null 2>&1'")
虽然时间被打印到标准输出,但 respond 的值只是空的。
最佳答案
“time”命令将结果打印到 stderr,而不是 stdout。因此它不会通过管道传输到您的变量中。
您应该将 stderr 重新路由到 stdout 以实现您想要的:
result=$(ssh host time "command" 2>&1)
你的完整代码看起来像这样:
respond=$(ssh ${fromNode} /usr/bin/time "-f" "%e" "'sh' '-c' 'virsh migrate --live ${VM} qemu+ssh://${toNode}/system > /dev/null 2>&1'" 2>&1)
关于bash - 在 bash 脚本中将 SSH 输出捕获为变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12048906/