2016-07-28 10 views
1

我知道,git允许您在bin目录中放置一个可执行文件,当提供正确的命名约定作为子命令时。 bin/git-flow/bin/git-fire是通过创建git特有的子命令文件来扩展shell脚本,它可以模仿其他脚本吗?

$ git flow

$ git fire

是git的可执行文件中这个功能也可以任何可执行只要使用这个文件命名约定覆盖。

我试过这个与/bin/npm-custom$ npm custom但它执行/bin/npm可执行文件而不是/bin/npm-custom所以我假设默认情况下这是行不通的。

如果这是通过原始命令脚本(git)实现的,那么可以通过另一种方式来重现此功能,可以通过在执行脚本之前读取这些命令来实现。

的.bash_profile

source ~/.check_for_subcommand_exacutables;

在此先感谢

回答

3

于一般的,你必须在当前git命令,它应该是很容易的override the precedence做到这一点,除非你已经在某种程度上做到了。例如,您可以创建默认回落到原来的命令的功能:

git() { 
    case "$2" in 
     "my_subcommand") 
      … 
      break 
     *) 
      command "[email protected]" 
    fi 
} 

在Git中的情况下,具体地讲,您可以创建aliases for subcommands,如st = status

+1

,所以我只想有为每个可执行文件编写一个函数,我希望为其添加一个子命令。好,谢谢。 – TarranJones

+0

它应该是'command $ @'(不含引号)。否则,分词不会发生 – hek2mgl

+0

@ hek2mgl不,[你确实想用引号](http://mywiki.wooledge.org/WordSplitting)。 '“$ @”'扩展到每个参数,单独引用,所以它基本上是*方式来传递参数不变。 – l0b0