$PATH在.bashrc处扩展在git钩子脚本中不可用
当在存储库中接收到推送时,我需要运行某个命令。该二进制文件位于我添加到.bashrc的自定义路径上,通常从shell开始工作。我写了一个小脚本作为git钩子。但是,添加的.bashrc似乎不会影响此脚本$PATH在.bashrc处扩展在git钩子脚本中不可用,git,bash,Git,Bash,当在存储库中接收到推送时,我需要运行某个命令。该二进制文件位于我添加到.bashrc的自定义路径上,通常从shell开始工作。我写了一个小脚本作为git钩子。但是,添加的.bashrc似乎不会影响此脚本 我尝试将bash~/.bashrc放在脚本顶部,但没有成功。如果我手动运行脚本,比如说$sh post receive,它就可以正常工作。怎么了?这bash~/.bashrc生成了一个新的shell,它执行名为.bashrc的文件,当该子shell退出时,该子shell中的任何状态都会自然丢失—
我尝试将
bash~/.bashrc
放在脚本顶部,但没有成功。如果我手动运行脚本,比如说$sh post receive
,它就可以正常工作。怎么了?这bash~/.bashrc
生成了一个新的shell,它执行名为.bashrc
的文件,当该子shell退出时,该子shell中的任何状态都会自然丢失——在转到包含调用的实际脚本的第二行之前,它必须这样做。该脚本可能是以其他用户的身份运行的,或者正在使用禁用交互功能和/或启动脚本的选项进行调用。这是应该的;这里真的没有什么“错”
您可以添加/home/you/.bashrc
作为一种快速而肮脏的解决方法;或者,更恰当地说,直接修改脚本的路径;或者,更恰当地说,模块化依赖关系,例如,将代码放在一个单独的文件中,您可以从.bashrc
和这个脚本中获取这些代码,但对于这个孤立的情况,这肯定是过火了
“包含”shell scipt文件的命令称为“源”或“点”;在Bash中,source
可以作为同义词使用,但在正确的Bourne shell中,它是一个文字点(又称句号,句号):
检查你的.bashrc
在某些发行版中,在交互模式下未执行时跳过脚本的结尾。
把你需要的有用的东西带到跳过的部分
看来:
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
这对于修复作为git
post-update
hook一部分遇到的Jekyll依赖项非常有用。采购~/。bash_profile
可能是一种肮脏的方法,但考虑到大多数人将如何安装rvm和后续gems,它很容易成为一种跨平台的解决方案。非常感谢!❤️ 这就是我的问题所在
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac