繁体   English   中英

如何在git别名中使用bash函数?

[英]How to use a bash function in a git alias?

我想在git别名中使用bash函数。 所以我把它添加到我的.bashrc

fn() {
    echo "Hello, world!"
}
export -f fn

和我的.gitconfig

[alias]
    fn = !fn

但是然后git fn产生一个错误:

fatal: cannot run fn: No such file or directory
fatal: While expanding alias 'fn': 'fn': No such file or directory

这是在git别名定义中使用bash函数的正确方法吗?

多数民众赞成因为git使用/bin/sh (所以你的.bashrc没有来源)。

您可以在此答案中指定的git别名中调用bash。

问题是由git命令启动的bash shell没有加载你的.profile (负责包含.bashrc那个)。

可能还有其他方法可以做,但您可以通过以下方式解决:

[alias]
    fn = !bash -c 'source $HOME/.my_functions && fn'

使用.my_functions这样的文件:

#!/bin/bash
fn() {
    echo "Hello, world!"
}

如果希望从常规shell中获取这些函数,甚至可以将.my_functions输入到.bashrc

我不知道为什么,但如果我只是在.gitconfig的函数名之前放一个空格,它可以正常工作并输出消息:

[alias]
    fn = ! fn

它可能是git中的一个bug,或者我在文档中遗漏了一些东西。

如果你想100%确定导出的函数将被尊重,请确保被调用的shell是bash,而不是/bin/sh (如果它是由ash或dash实现的,它将不会尊重它们)。

fn() { echo "hello, world"; }
export -f fn
git config --global alias.fn $'!bash -c \'fn "$@"\' _'
git fn

......适当地发出:

hello, world

.gitconfig的相关条目:

[alias]
    fn = !bash -c 'fn \"$@\"'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM