下面的脚本在远程主机中不起作用
PARAMETER="123 456"
ssh user@host PARAMETER="$PARAMETER" bash -s <<- __EOF
echo $PARAMETER
__EOF
但是当我尝试在下面时,它工作正常
PARAMETER="123"
ssh user@host PARAMETER="$PARAMETER" bash -s <<- __EOF
echo $PARAMETER
__EOF
看起来它不接受变量中的空格。谁能帮忙?
与本地一样,您必须引用变量扩展以禁用单词拆分。echo "$var"
不是echo $var
.
并且您必须引用 ssh 取消引用的值:
ssh user@host PARAMETER="$(printf "%q" "$PARAMETER")" bash -s <<- __EOF
echo "$PARAMETER"
__EOF
如果您使用的是 stdin,我建议使用 stdin 传输所有上下文,而不关心超级双引号:
# define function with the code you want to run, normally quoted
work() {
echo "$PARAMETER"
}
ssh user@host bash -s <<EOF
$(declare -p PARAMETER) # serialize variables
$(declare -f work) # serialize functions
work # run the function
EOF