Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Git别名启动Bash函数_Git_Alias_Built In_Git Checkout_Bash Function - Fatal编程技术网

如何使用Git别名启动Bash函数

如何使用Git别名启动Bash函数,git,alias,built-in,git-checkout,bash-function,Git,Alias,Built In,Git Checkout,Bash Function,我想在~/.gitconfig中使用Git别名,以便调用bash函数(如果已定义),否则调用常规的Git checkout 这就是我设计的: cat ~/.gitconfig ... [alias] ... co = !(compgen -A function vxzExecuteGitCheckout >/dev/null && vxzExecuteGitCheckout ) || git checkout 问题是Git使用/bin/sh(在我的例子中,它恰好是

我想在~/.gitconfig中使用Git别名,以便调用bash函数(如果已定义),否则调用常规的
Git checkout

这就是我设计的:

cat ~/.gitconfig
...
[alias]
...
    co = !(compgen -A function vxzExecuteGitCheckout >/dev/null && vxzExecuteGitCheckout ) || git checkout
问题是Git使用/bin/sh(在我的例子中,它恰好是
dash
),并且由于它是
bash
内置的,所以它会在
compgen
上呕吐

有没有办法确保Git使用
bash
来执行这个命令

请注意,
vxzExecuteGitCheckout()
是在一个尚未包含在~/.bashrc中的文件中定义的


另一个问题是,如果我要使用
git co-b param1 param2…
,如果找不到此Bash函数,上述别名定义是否会将
-b param1 param2
传递到
git checkout

co = !bash -c '( compgen -A function vxzExecuteGitCheckout >/dev/null && vxzExecuteGitCheckout ) || git checkout' -

另一种可能是用正确的shebang行
#编写一个shell脚本/bin/bash
并将该脚本称为
alias.co
(请参见问题)

谢谢,这很有帮助。使用这个:
co=!bash-c'(compgen-A function vxzExecuteGitCheckout>/dev/null&&vxzExecuteGitCheckout“$@”)| | git checkout“$@”
您可能想解释尾随破折号的重要性,因为没有它,
git co
命令似乎什么都做不了。我最终放弃了这种方法,因为我想要调用的函数vxz。。。更改我正在使用的shell的环境变量。但由于该函数在其自身的新shell中被调用,因此环境变量的更改不会影响调用shell。@gurjeet:我们可能知道您试图解决的问题吗?也许还有另一种方法可以解决这个问题,我经常使用PostgreSQL源代码,并使用一些bash函数来完成一些常见的事情。我希望每次切换到Postgres源代码的不同Git分支时,这些函数都能做正确的事情。为了做正确的事情,这些函数依赖于一些环境。变量,我想在每次签出时更新这些环境变量。最后,我向bash特殊变量$PROMPT\u命令添加了一个函数调用。PROMPT_命令=vxzDetectBranchChange。现在每次我切换到一个新的分支,这个函数都会更新所有相关的环境变量,包括$PATH。有人知道尾随破折号的用途吗,因为没有它,它就不起作用了?