运行.bashaliases
命令时,有没有办法在默认情况下将git源设为git submodule foreach
文件?
例如,我将git --no-pager grep -n
别名为ggrep
,我经常想要使用git submodule foreach "ggrep <PATTERN>; true"
搜索所有子模块,但该命令只会为每个子模块打印“ggrep:not found”子模块。
答案 0 :(得分:1)
别名不是用于非交互式使用,即使它们 来源于正在使用的shell中,它们仍然无法在此上下文中可用而不是明确的使用shopt -s expand_aliases
打开 for the shell 。
如果确实想要使用别名执行此操作,您可以这样做。在~/.bash_profile
中,输入以下内容:
export BASH_ENV=$HOME/.env ENV=$HOME/.env
......以及~/.env
:
# attempt to enable expand_aliases only if current shell provides shopt
if command -v shopt; then
shopt -s expand_aliases
fi
alias ggrep='git --no-pager grep -n'
如果您的/bin/sh
由bash提供,请考虑导出的功能 - 将以下内容放在~/.bash_profile
中,例如:
ggrep() { git --no-pager grep -n "$@"; }
export -f ggrep
(与~/.bashrc
不同,~/.bash_profile
仅在登录shell上执行;但是,由于此命令将内容导出到环境中,因此作为子进程调用的shell将继承此类内容。)
如果您没有这种保证,请在路径中添加一个脚本:
#!/bin/sh
exec git --no-pager grep -n "$@"
请注意,/bin/sh
shebang在这里使用,因为它可能比bash更小,更轻,而exec
用于避免额外fork()
到将命令作为子进程运行。