从通过 post-receive 挂钩创建的 ssh 会话调用时导出不起作用

Export doesn't work when called from ssh session created through post-receive hook

我在远程存储库中有这个 Git post-receive 挂钩,它 运行 在 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 它时它不起作用.

内联内容默认有 shell 扩展 运行,所以你的变量在被调用的 shell 看到它们之前在文本中被扩展。引用定界符中的任何内容以将其关闭,或者转义您不想扩展内联的位,例如

cat <<\EOD
    export GOPATH=~/go
    export PATH=$GOPATH/bin:$PATH
EOD

cat <<EOD
    export GOPATH=~/go
    export PATH=$GOPATH/bin:$PATH
EOD