我需要在存储库中收到推送时运行某个命令。该二进制文件位于一个自定义路径,我添加到.bashrc并从shell正常工作。我写了一个小脚本作为git钩子。但是,.bashrc添加似乎不会影响此脚本。
我尝试将bash ~/.bashrc
放在脚本的顶部,但没有用。如果我手动运行脚本,说$ sh post-receive
,它就可以了。有什么问题?
答案 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