我在远程存储库中有这个Git接收挂钩,该存储库在SSH会话中运行一堆命令:
#!/bin/bash
ssh -q admin@node-one << EOF
export GOPATH=~/go
export PATH=$GOPATH/bin:$PATH
echo $PATH
echo $GOPATH
cd ~/portfolio
./kill.sh
git pull
make build
./run.sh
EOF
我得到一个与找不到goimports有关的错误,因为export
在这种情况下似乎不起作用。
remote: /usr/lib/git-core:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
remote:
我可以手动运行该钩子,但效果很好,但是由于某些原因,当我通过远程存储库中的git push
运行该钩子时,它不起作用。
答案 0 :(得分:6)
内联内容默认情况下会运行shell扩展,因此您的变量将在被调用的shell看到它们之前在文本中进行扩展。引用定界符中的任何内容以将其关闭,或转义您不希望扩展内联的位,例如
cat <<\EOD
export GOPATH=~/go
export PATH=$GOPATH/bin:$PATH
EOD
或
cat <<EOD
export GOPATH=~/go
export PATH=\$GOPATH/bin:\$PATH
EOD