从通过后接收挂钩创建的ssh会话中调用时,导出不起作用

时间:2019-11-17 21:22:48

标签: bash git ssh environment-variables githooks

我在远程存储库中有这个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运行该钩子时,它不起作用。

1 个答案:

答案 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