【问题标题】:$PATH extended at .bashrc not available within git hook script在 .bashrc 扩展的 $PATH 在 git 钩子脚本中不可用
【发布时间】:2012-02-23 01:05:48
【问题描述】:

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

我尝试将bash ~/.bashrc 放在脚本的顶部,但没有奏效。如果我手动运行脚本,比如$ sh post-receive,它工作得很好。怎么了?

【问题讨论】:

    标签: git bash


    【解决方案1】:

    检查你的 .bashrc 在某些发行版中,在交互模式下不执行时会跳过脚本的结尾。 只需将您需要的有用的东西带到跳过部分即可。

    看起来是这样的:

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

    【讨论】:

    • 非常感谢! ❤️这是我的问题
    【解决方案2】:

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

    您可以添加. /home/you/.bashrc 作为快速而肮脏的解决方法;或者,更准确地说,直接修改脚本的 PATH ;或者,更恰当地说,将依赖项模块化,例如通过将代码放在一个单独的文件中,您可以从 .bashrc 和此脚本中获取该代码 - 但对于这种孤立的情况,这肯定是矫枉过正。

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

    . /path/to/stuff
    

    【讨论】:

    • 这对于修复作为 git post-update 钩子的一部分遇到的 Jekyll 依赖项非常有用。采购. ~/.bash_profile 可能是一种肮脏的方法,但考虑到大多数人将如何安装 rvm 和后续 gem,它很容易成为跨平台解决方案。
    【解决方案3】:

    bash ~/.bashrc 生成了一个新的 shell,它执行名为 .bashrc 的文件,并且当该子 shell 退出时,该子 shell 中的任何状态都会自然丢失——在进入第二行之前,它必须这样做包含调用的 实际 脚本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-09
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 2011-03-19
      • 2014-12-16
      • 1970-01-01
      相关资源
      最近更新 更多