我想在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函数的正确方法吗?
答案 0 :(得分:3)
多数民众赞成因为git使用/bin/sh
(因此您的.bashrc
未被采购)。
您可以在this answer中指定的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
。
答案 1 :(得分:1)
我不知道为什么,但是如果我只是在.gitconfig
中的函数名称之前放置一个空格,它可以正常工作并输出消息:
[alias]
fn = ! fn
这可能是git中的一个错误,或者我在文档中遗漏了一些内容。
答案 2 :(得分:0)
如果你想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 \"$@\"'