通过SSH在远程shell脚本执行中分配变量

时间:2016-07-03 08:17:50

标签: linux bash shell ssh amazon-ec2

我试图通过SSH在远程服务器上执行一些shell脚本。

以下是代码示例:

$string

cat打印预期结果但是 cat什么都不打印。

如何将{{1}}的返回值存储在变量中?

3 个答案:

答案 0 :(得分:1)

您需要制作Here doc literal的内容,否则它们将在当前shell中展开,而不是在所需的远程shell中展开。

引用EOF

ssh .... <<'EOF'
...
...
EOF

答案 1 :(得分:1)

你应该能够做到这一点:

ssh -i $KEYFILE_PATH ubuntu@$TARGET_INSTANCE_IP "bash"  <<'_END_'
    cat /home/ubuntu/temp.txt
    string=$(cat /home/ubuntu/temp.txt)
    echo $string
_END_

<<'_END_' ... _END_被称为Here Document字面值,或者#34; heredoc&#34;文字。 '_END_'周围的单引号阻止本地shell解释heredoc中的变量和命令。

答案 2 :(得分:0)

不需要中间shell(假设您在远程系统上使用bash)。 此外,您不必使用中间 HERE-DOC 。只需传递一个多行命令:

ssh -i $KEYFILE_PATH ubuntu@$TARGET_INSTANCE_IP '

cat /home/ubuntu/temp.txt
string=$(cat /home/ubuntu/temp.txt )
echo $string
'

注意我使用单引号来阻止对本地shell进行评估。