使用submodule foreach时加载bash别名

时间:2016-06-27 16:24:43

标签: git bash git-submodules

运行.bashaliases命令时,有没有办法在默认情况下将git源设为git submodule foreach文件?

例如,我将git --no-pager grep -n别名为ggrep,我经常想要使用git submodule foreach "ggrep <PATTERN>; true"搜索所有子模块,但该命令只会为每个子模块打印“ggrep:not found”子模块。

1 个答案:

答案 0 :(得分:1)

别名不是用于非交互式使用,即使它们 来源于正在使用的shell中,它们仍然无法在此上下文中可用而不是明确的使用shopt -s expand_aliases打开 for the shell

无论如何使用Alias

如果确实想要使用别名执行此操作,您可以这样做。在~/.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()到将命令作为子进程运行。