在bash中通过ssh创建变量

Tal*_*ali 1 bash ssh shell-script

#!/bin/bash -x

ssh -T root@jumpbox ssh -T root@IP << EOF  
YY=$(date +'%y')  
echo $YY  
EOF  
Run Code Online (Sandbox Code Playgroud)

输出:

Trying tunnel from jumpbox...  
Pseudo-terminal will not be allocated because stdin is not a terminal.  
-bash: line 6: YY: command not found
Run Code Online (Sandbox Code Playgroud)

我需要分配的变量更复杂,它不是我的描述中显示的年份编号。

Sté*_*las 5

当您不引用EOFin 时<<EOF,扩展由 here 文档内的本地 shell 执行(因此$(date ...)由本地扩展date$YY扩展为本地 shell 中的值(空,除非您之前已分配值))。如果您将 here-document 的内容逐字传递给远程 shell,则需要以EOF一种或另一种方式引用:

ssh -T root@IP << 'EOF'
YY=$(date +'%y')
echo "$YY"
EOF  
Run Code Online (Sandbox Code Playgroud)