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

时间:2018-03-01 16:14:55

标签: bash ssh

我知道这个讨论: 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命令

1 个答案:

答案 0 :(得分:1)

由于传入文字单引号,执行的命令变为'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"