OS X - 采用 Ubuntu 的“未找到命令”行为

OS X - 采用 Ubuntu 的“未找到命令”行为

有一个关于覆盖默认值的问题找不到命令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 搜索。

相关内容