#!/bin/bash -x
ssh -T root@jumpbox ssh -T root@IP << EOF
YY=$(date +'%y')
echo $YY
EOF
输出:
Trying tunnel from jumpbox...
Pseudo-terminal will not be allocated because stdin is not a terminal.
-bash: line 6: YY: command not found
我需要分配的变量更复杂,它与我的描述中所示的年份无关。
答案1
当您不引用EOF
in时<<EOF
,扩展由此处文档内的本地 shell 执行(因此,$(date ...)
由本地 shell 扩展date
并$YY
扩展为本地 shell 中的值(为空,除非您之前已分配了值))。如果要将此处文档的内容逐字传递到远程 shell,则需要以EOF
一种或另一种方式引用:
ssh -T root@IP << 'EOF'
YY=$(date +'%y')
echo "$YY"
EOF