一尘不染

无法通过SSH在heredoc或命令中使用本地和远程变量

linux

以下是使用Heredoc的ssh脚本的示例(实际脚本更为复杂)。是否可以在SSH heredoc或命令中同时使用本地和远程变量?

FILE_NAME在本地服务器上设置为在远程服务器上使用。REMOTE_PID在远程服务器上运行时设置为在本地服务器上使用。FILE_NAME在脚本中被识别。REMOTE_PID未设置。

如果EOF更改为'EOF',则REMOTE_PID设置为,而`FILE_NAME则未设置。我不明白为什么会这样?

有没有一种可以同时识别REMOTE_PIDFILE_NAME识别的方式?

正在使用bash的版本2。默认的远程登录名是cshell,本地脚本是bash。

FILE_NAME=/example/pdi.dat
ssh user@host bash << EOF
# run script with output...
REMOTE_PID=$(cat $FILE_NAME)
echo $REMOTE_PID
EOF
echo $REMOTE_PID

阅读 286

收藏
2020-06-07

共1个答案

一尘不染

$如果您不想扩展变量,则需要转义符号:

$ x=abc
$ bash <<EOF
> x=def
> echo $x   # This expands x before sending it to bash. Bash will see only "echo abc"
> echo \$x  # This lets bash perform the expansion. Bash will see "echo $x"
> EOF
abc
def

因此,在您的情况下:

ssh user@host bash << EOF
# run script with output...
REMOTE_PID=$(cat $FILE_NAME)
echo \$REMOTE_PID
EOF

或者,您也可以使用带单引号的herestring:

$ x=abc
$ bash <<< '
> x=def
> echo $x  # This will not expand, because we are inside single quotes
> '
def
2020-06-07