在远程主机中调用局部变量



下面的脚本在远程主机中不起作用

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

相关内容

  • 没有找到相关文章

最新更新