扩展为.bashrc的$ PATH在git hook脚本中不可用

时间:2012-02-23 01:05:49

标签: git bash

我需要在存储库中收到推送时运行某个命令。该二进制文件位于一个自定义路径,我添加到.bashrc并从shell正常工作。我写了一个小脚本作为git钩子。但是,.bashrc添加似乎不会影响此脚本。

我尝试将bash ~/.bashrc放在脚本的顶部,但没有用。如果我手动运行脚本,说$ sh post-receive,它就可以了。有什么问题?

3 个答案:

答案 0 :(得分:3)

该脚本可能以不同的用户身份运行,或者正在调用带有禁用交互功能和/或启动脚本的选项。这是应该的;这里没有什么是“错误的”。

您可以添加. /home/you/.bashrc作为快速而肮脏的解决方法;或者更确切地说,只是直接修改脚本的PATH;或者,甚至更恰当地,模块化依赖关系,例如通过将代码放在一个单独的文件中,您可以从.bashrc和此脚本中获取这些文件 - 但对于这个孤立的案例,这肯定有点过分。

“包含”shell scipt文件的命令称为“source”或“dot”;在Bash中,source可用作同义词,但在适当的Bourne shell中,它是一个字面点(也称为句点,句号):

. /path/to/stuff

答案 1 :(得分:2)

bash ~/.bashrc生成一个执行名为.bashrc的文件的新shell,当子shell退出时,该子shell中的任何状态都会自然丢失 - 在继续执行之前必须执行此操作包含该调用的实际脚本的第二行。

答案 2 :(得分:2)

检查你的.bashrc 在某些distrib中,当不在交互模式下执行时,将跳过脚本的结尾。 只需将您需要的有用内容放在跳过部分上。

它看起来:

# If not running interactively, don't do anything
case $- in
  *i*) ;;
  *) return;;
esac