我通常在我的.bashrc文件中添加多个别名和bash函数。 例如 g 代表 "grep -nri ...", v 代表 vim 等。但是,有时我的新操作系统有一些cmds被我的别名覆盖,因此我看到意外的构建失败。
有没有办法在 bashrc 中添加别名/函数,它应该只在交互式 shell 上运行,不应该通过 makefile 或其他脚本运行?
谢谢。。。
默认情况下,bash 别名的扩展在非交互式会话中处于禁用状态(例如,在执行脚本时(。
您是否在某个地方执行 .bashrc/.profile 中的shopt -s expand_aliases
?这将在非交互式会话中启用别名扩展。
为了 100% 安全,您可以在运行之前执行shopt -u expand_aliases
,例如 make 脚本。这将取消设置expand_aliases
标志。
另一种方法是在运行非交互式会话时完全停止获取 bash 配置文件。这是通过将以下行添加到您的 .profile 或 .bashrc 来实现的:
[[ $- =~ i ]] && return
该行之前的代码仍在非交互式会话中执行。请务必添加下面的自定义别名和函数。
不应为非交互式 shell 定义别名和快捷方式函数,因为其他 shell 脚本可能会混淆您的自定义(正如您发现的那样(。如果执行脚本的 shell 不需要读取和处理所有自定义项,则对性能也有好处。
通常,您可以通过~/.bashrc
末尾的 guard 子句执行此操作。将您的自定义项放在该保护之后。
# Generic settings (exports, PATH, ...) here.
# ...
case "$-" in
*i*) ;;
*) return;;
esac
# Aliases and shortcut functions here
alias rm=...
grep()
{
...
}