我试图捕获脚本的输出(驻留在远程服务器上)通过SSH运行到变量中,下面是我的代码:
ssh username@hostname << EOF
variable=`./script_on_remote_server.sh`
echo $variable
EOF
当我运行上面的脚本时,没有任何内容存储在变量中,并且该变量的echo不返回任何内容。
我做错了什么?
答案 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