我的~/bin
目录中有一些自定义git子命令。它们是名为git-foobar
的简单bash脚本,它们曾用于工作,例如git foobar
。 (~/bin
目录位于我的PATH上。)
我最近注意到他们已经停止工作,我无法弄清楚原因。脚本本身没有改变。但是我的PATH有......
前段时间我将.git/safe/../../bin
添加到我的路径中。我们的想法是让项目的./bin
目录中的项目可执行文件更容易运行,即您可以键入deploy
而不是bin/deploy
。为安全起见,“已知安全”项目在PATH上有bin
目录,通过触摸safe
目录中的.git
文件可将项目标识为安全。当然,在其他任何地方,前缀指向的位置都不存在。
使用前缀,运行子命令(例如git foobar
)会导致git: 'foobar' is not a git command. See 'git --help'.
脚本本身可以在PATH上找到,因为git-foob<tab>
自动填充到git-foobar
并运行;但是git并不认为它是一个子命令。
当我删除这个前缀时,我的git子命令再次起作用...虽然git的自动完成没有(我认为它曾用于我的自定义子命令)。即输入git foob<tab>
不会自动完成git foobar
。
似乎.git/safe/../../bin
PATH前缀打破了git搜索子命令的方式,以及git的自动完成。
有谁可以解释发生了什么?我怎么能让事情再次发挥作用呢?
答案 0 :(得分:4)
问题原来是使用波浪号。当我用~/bin
替换/Users/andy/bin
时,一切正常。
(这当然有用。我想知道Apple对shellshock响应bash的更新是否会影响PATH中的波浪扩展。)