现在我有这个档案到目前为止......
#!/usr/bin/env bash
DIRECTORY=$1
ssh root@example.com "$( cat <<'EOT'
cd /web/$DIRECTORY || exit
pwd
unset GIT_DIR
git log --oneline -n 10 --decorate
git branch
EOT
)";
为什么pwd只打印出“/ web /”?它实际上似乎并没有使用我的变量。然后所有git命令都会抛出有关在web目录中的错误。
如果我在ssh-ing之前将它回显$ DIRECTORY,它会回显我的变量,但拒绝将其传递给ssh命令?
答案 0 :(得分:1)
这是因为你引用了这里的doc分隔符。这是POSIX:
如果引用 word 中的任何字符,则通过对单词执行引号删除来形成分隔符,并且here-document行将不会展开。否则,分隔符就是单词本身。
这是一个例子:
#!/bin/bash
var=42
cat << 'end'
With quotes: $var and \$var
end
cat << end
Without quotes: $var and \$var
end
执行时:
With quotes: $var and \$var
Without quotes: 42 and $var