如何替换“bash:$ COMMAND:command not found”消息?

时间:2014-03-17 05:02:16

标签: linux bash stdout stderr

任何帮助将不胜感激。

基本上,我想替换:

~]$ obvfake
bash: obvfake: command not found

使用:

~]$ obvfake
[*] command not found

感谢。

4 个答案:

答案 0 :(得分:8)

bash版本4引入了一个用于处理缺失命令的钩子;将以下内容添加到.bashrc文件中。

command_not_found_handle () {
    printf "[*] command not found\n"
    return 127
}

答案 1 :(得分:3)

您可以将此内容写入.bashrc

function error_handler {
  if [ $? -eq 127 ]; then
      echo "[*] command not found"
  fi  
}

trap 'error_handler' ERR 

但仍会显示bash: obvfake: command not found。您可以通过执行以下操作来抑制此操作:

obvfake 2> /dev/null

答案 2 :(得分:0)

我只是将错误重定向到/dev/null。如果obvfake返回大于0的退出代码,则它将回显您的自定义错误消息。

obvfake 2>/dev/null || echo "[*] command not found"

这可能有点过于笼统,因为它不会区分错误代码。所以我们可以检查一下特定的退出代码。

obvfake 2>/dev/null || {
    if (( $? == 127 )); then
        echo "[*] command not found"
    fi
}

如果我想检查很多错误代码,我会用if语句替换case表达式。 为了便于使用,您可以将该功能集成到脚本中,并将其包装到一个函数中,以便在各种故障点重用它。

您非常希望了解bash中有关redirection的更多信息。 :)

编辑:我想我误解了原来的问题。我以为obvfake是一个自定义脚本,抱怨在系统上调用但未找到的命令。

答案 3 :(得分:-1)

正如chepner所建议的......您可以通过将bash函数(处理Signal 127或命令未找到的功能)替换为您设计的函数来自定义默认消息,并将该函数包含在.bashrc脚本中。

# function that handles command-not-found message.
command_not_found_handle() {

 echo -e "My Friend, '$1' is a typo. Please correct it and re-enter the command."  
  return 127

}

您也可以在以下位置查看:http://bitdiffferent.com/command-not-found/