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

标签 bash ssh stdout

在编写 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/

相关文章:

regex - 仅当字符串尚不存在时才使用 sed 将字符串添加到行尾

几次推送后 Git 推送挂起

python - 具有自定义路径的 Pip、Git 和 ssh key

c# - 从 ffmpeg 标准输出的单个流中获取多个图像

bash - 在 Bash 中,是否可以编写一个 'identity' 函数(相对于参数传递/返回)

r - 调度属于 R 包的函数

c - 如何将 child_process 的标准输出重定向到标准输出和文件

javascript - 如何使用node.js和gm检查损坏的jpg图像?

regex - 用于操作大括号分隔的配置文件的 Bash

ssh - 无法获得 Vagrant 工作的代理转发