是否可以在SSH heredoc或命令中同时使用本地和远程variables?
下面是一个使用heredoc的ssh脚本示例(实际的脚本比较复杂):
在本地服务器上设置FILE_NAME以在远程服务器上使用。
在本地服务器上使用的远程服务器上运行时,设置REMOTE_PID。
FILE_NAME在脚本中被识别。 REMOTE_PID未设置。
如果EOF更改为“EOF”,则设置REMOTE_PID,而不是FILE_NAME。 (我不明白这是为什么?)
有REMOTE_PID和FILE_NAME都可以识别的方法吗?
版本2的bash被使用。 默认的远程login是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
所以在你的情况下:
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