我正在尝试使用 通过 SSH 发送 bash 命令ssh -q $REMOTE -x "command"
。因为我有多个 bash 命令,所以我使用<< EOF
。
问题是,当我将 readlink 命令的结果赋给变量时,它返回一个空字符串。而当我直接调用它时,它不会返回空字符串。
这是我的代码的简化版本:
ssh -q $REMOTE -x << EOF
LINK="/path/to/my/link" # the link points to /path/to/my/file
readlink $LINK # outputs /path/to/my/file
TEST=$(readlink -f "$LINK")
echo $TEST # outputs an empty string
EOF
此时,我将相同的代码放入远程计算机上的 shell 脚本中,并尝试调用该 shell 脚本:
# local machine
ssh -q $REMOTE -x << EOF
./test-script
EOF
# remote machine "test-script"
LINK="/path/to/my/link" # the link points to /path/to/my/file
readlink $LINK # outputs /path/to/my/file
TEST=$(readlink -f "$LINK")
echo $TEST # outputs /path/to/my/file
突然它就开始工作了,当我调用远程脚本时,一切都正常工作,但是为什么它不能通过 ssh 工作呢?
答案1
在 here document 中,您的变量在源端进行求值。如果您希望变量在目标端进行求值,请转义 $。例如,
ssh -q $REMOTE -x << EOF
LINK="/path/to/my/link"
readlink \$LINK
TEST=\$(readlink -f "\$LINK")
echo \$TEST
EOF
希望这可以帮助