在脚本中通过ssh捕获bash脚本的输出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在脚本中通过ssh捕获bash脚本的输出相关的知识,希望对你有一定的参考价值。

我知道这个讨论:Running A Bash Script Over SSH

但是,我对它有一些不同的看法 - 这让我很难过。

我的〜/ .ssh / config中有一个名为remServer的ssh别名,我可以ssh就好了。我想在该服务器上运行一些远程命令并处理本地服务器上的输出。

我的问题是将变量替换为ssh命令(这样的基础主题),但我在这里遗漏了一些东西。

这是问题所在:

#this works
op="ls"
cmd="ssh remServer '$op'"
res=`$cmd`
echo $res

#this doesn't
op="ls -lt"
cmd="ssh remServer '$op'"
res=`$cmd`
echo $res

无论我使用单引号还是双引号的方式有多少,我只能回过头来看:

找不到bash ls -lt命令

答案

由于您传入文字单引号,执行的命令变为'ls -lt',它也在本地提供相同的错误(与没有引号的ls -lt相反)。

最简单的解决方案就是删除引号:

op="ls -lt"
cmd="ssh remServer $op"
res=`$cmd`
echo $res

更好的解决方案是使用正确的数组并转义:

op=(ls -lt)
cmd=(ssh remServer "$(printf '%q ' "${op[@]}")" )
res=$("${cmd[@]}")
echo "$res"

以上是关于在脚本中通过ssh捕获bash脚本的输出的主要内容,如果未能解决你的问题,请参考以下文章

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

在 Bash 脚本中通过管道传入/传出剪贴板

在 Bash 脚本中通过管道传入/传出剪贴板

用于从该框中通过 SSH 连接到 jumphost 和 sftp 的 Python 脚本

如何在bash脚本中通过函数调用将参数/参数从一个函数传递到另一个函数[重复]

在期望脚本中通过 ssh/telnet(甚至是 shell)传输二进制数据时出错