有一个关于覆盖默认值的问题找不到命令Ubuntu 上的行为。这里我尝试将以下内容添加到 ~/.bash_profile、/etc/bashrc 和 /etc/profile,但没有成功:
function command_not_found_handle {
echo "oops!"
}
我怎样才能在 OS X 中做同样的事情?
答案1
它不是 bash 或 OS X 的某些功能,正如所引用的文章中明确暗示的那样。作为证据,你也有“我删除了我的 /etc/bash.bashrc”换句话说,系统上没有任何东西调用该句柄,因此没有任何效果。
您需要获取该软件包的源代码并在 OS X 上编译(或甚至移植,但可能有等效方法)。然后您需要添加如果(以下)OS X 上的默认 bash 配置文件,它应该位于 /etc 的某个位置。
Ubuntu 中的 /etc/bash.bashrc 部分
# 如果安装了 command-not-found 包,则使用它 如果 [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found ]; 那么 函数命令未找到句柄 { # 检查,因为 cnf 可能在此期间被删除 如果 [ -x /usr/lib/command-not-found ]; 那么 /usr/bin/python /usr/lib/command-not-found——$1 返回 $? elif [ -x /usr/share/command-not-found ]; 然后 /usr/bin/python /usr/share/command-not-found——$1 返回 $? 别的 返回 127 菲 } 菲
答案2
事实上,它是这是 bash 的一个特性,但只在较新的版本中出现:
有一个新的内置错误处理函数,名为 command_not_found_handle。
从https://www.tldp.org/LDP/abs/html/bashver4.html
您可能需要brew install bash
获取最新版本。从那里开始,它就像您希望的那样工作:
$ function command_not_found_handle {
> echo "w00t - '$@' command not found"
> }
$ lkjsdf
w00t - 'lkjsdf' command not found
请注意,您可能还需要更改 shell。有关该操作的说明似乎是针对终端的(Terminal 与 iTerm 等),因此请务必也对此进行 Google 搜索。