以下是使用Heredoc的ssh脚本的示例(实际脚本更为复杂)。是否可以在SSH heredoc或命令中同时使用本地和远程变量?
FILE_NAME在本地服务器上设置为在远程服务器上使用。REMOTE_PID在远程服务器上运行时设置为在本地服务器上使用。FILE_NAME在脚本中被识别。REMOTE_PID未设置。
FILE_NAME
REMOTE_PID
如果EOF更改为'EOF',则REMOTE_PID设置为,而`FILE_NAME则未设置。我不明白为什么会这样?
EOF
'EOF'
有没有一种可以同时识别REMOTE_PID和FILE_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
$如果您不想扩展变量,则需要转义符号:
$
$ 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