存储脚本的输出在变量中通过ssh运行

时间:2015-07-12 05:13:02

标签: shell ssh scripting

我试图捕获脚本的输出(驻留在远程服务器上)通过SSH运行到变量中,下面是我的代码:

ssh username@hostname << EOF
variable=`./script_on_remote_server.sh`
echo $variable
EOF

当我运行上面的脚本时,没有任何内容存储在变量中,并且该变量的echo不返回任何内容。

我做错了什么?

2 个答案:

答案 0 :(得分:3)

首先,我将展示实现这一目标的一种方法:

variable=`echo ./script_on_remote_server.sh | ssh username@hostname`

或者如果您使用的是bash,我更喜欢这种语法:

variable=$(echo ./script_on_remote_server.sh | ssh username@hostname)

从您的帖子中说出来有点困难,但看起来您正在尝试执行以下操作:

ssh username@hostname <<EOF
variable=./script_on_remote_server.sh
echo $variable
EOF

然而,这里有一些误解。 variable=command不是将命令输出分配给变量的正确语法;实际上,它甚至不运行命令,它只是将文字值command赋给variable。你想要的是variable=`command`或(用bash语法)variable=$(command)。此外,我认为您的目标是让variable可用于本地计算机上的shell。声明要在远程计算机上运行的代码中的variable不是这样做的方法。 ;)即使你这样做了:

ssh username@hostname <<EOF
variable=`./script`
echo $variable
EOF

这是一种在常规上在远程主机上运行命令的效率较低的方法,因为variable会立即丢失:

echo ./script | ssh username@hostname

另请注意,ssh命令接受一个命令作为附加参数运行,因此您可以将整个内容缩写为:

variable=`ssh username@hostname ./script_on_remote_server`

答案 1 :(得分:0)

./script_on_remote_server.sh在远程计算机中进行评估。您需要用<< EOF引述<< 'EOF'并将-T添加到您的ssh命令中。

ssh -T username@hostname << 'EOF'
variable=`./script_on_remote_server.sh`
echo $variable
EOF