我在预提交时有一个git hook(用bash编写),它应该执行命令“gulp”。
当我手动运行bash脚本时,它完美无缺。 但是当提交完成时,钩子脚本被调用并执行但是不起作用的方式与手动调用时相同。
钩子脚本如下所示:
#!/bin/sh
touch log.txt #For testing purposes
pwd > log.txt
gulp >> log.txt
exit 0
直接手动调用脚本没有问题。
但是当git在提交时调用时,日志文件很好地创建,执行pwd并写入日志的路径(这与我手动运行时的路径相同)。但不知何故,如果我不写/usr/bin/gulp
而不是gulp
之类的东西,gulp命令就不会被执行。
我尝试过这样的事情:
#!/bin/sh
touch log.txt #For testing purposes
pwd > log.txt
path=$(which gulp)
echo $path >> log.txt
$path >> log.txt
exit 0
但是再一次,当没有手动启动时,which
命令似乎没有返回任何内容。
我必须遗漏一些东西,但我不知道这个问题有什么想法?
答案 0 :(得分:0)
最有可能的是,您没有为运行git挂钩的用户正确配置PATH环境变量。只是为了确定,执行/usr/bin/id >> log.txt
(完整路径可能因系统而异)或echo $USER >> log.txt
找出哪个用户运行脚本,然后检查该用户的$ PATH。 PATH可以在/etc/profile
,/etc/environment
和用户~/.bashrc
| ~/.bash_profile
| ~/.profile
| ~/.shrc
中定义,具体取决于您的系统和你的外壳。
which gulp
在这里没有给你任何结果,因为它也使用$ PATH。