我试图通过SSH在远程服务器上执行一些shell脚本。
以下是代码示例:
$string
cat打印预期结果但是
cat
什么都不打印。
如何将{{1}}的返回值存储在变量中?
答案 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进行评估。