Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 我怎样才能替换;bash:$COMMAND:COMMAND未找到;消息_Linux_Bash_Stdout_Stderr - Fatal编程技术网

Linux 我怎样才能替换;bash:$COMMAND:COMMAND未找到;消息

Linux 我怎样才能替换;bash:$COMMAND:COMMAND未找到;消息,linux,bash,stdout,stderr,Linux,Bash,Stdout,Stderr,任何帮助都将不胜感激 基本上,我想替换: ~]$ obvfake bash: obvfake: command not found 与: 谢谢 您可以将其写入您的.bashrc: function error_handler { if [ $? -eq 127 ]; then echo "[*] command not found" fi } trap 'error_handler' ERR 这仍然会显示未找到的bash:obvfake:command。您可以通过

任何帮助都将不胜感激

基本上,我想替换:

~]$ obvfake
bash: obvfake: command not found
与:


谢谢

您可以将其写入您的
.bashrc

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

trap 'error_handler' ERR 
这仍然会显示未找到的
bash:obvfake:command
。您可以通过执行以下操作来抑制此操作:

obvfake 2> /dev/null

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

obvfake 2>/dev/null || echo "[*] command not found"
这可能有点过于笼统,因为它无法区分错误代码。所以我们可以检查一个特定的出口代码

obvfake 2>/dev/null || {
    if (( $? == 127 )); then
        echo "[*] command not found"
    fi
}
如果我想检查大量错误代码,我会用
case
语句替换
If
表达式。 为了便于使用,您可以将该功能集成到脚本中,并可能将其包装成一个函数,以便在出现各种故障时重用它

您非常想在
bash
:)中了解更多信息


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

bash
Version4引入了一个钩子来处理丢失的命令;将以下内容添加到
.bashrc
文件中

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

正如切普纳所建议的。。。您可以通过将bash函数(handles Signal 127或command not found函数)替换为您设计的函数并将该函数包含在.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

}

您也可以在以下位置查看:

不确定我在哪里失败,或者预期结果是否不是我所期望的,但我已经尝试过了。它只打印这两种格式。>obvfake>bash:obvfake:未找到命令>[*]未找到命令found@CarlosSanchez,为这种行为添加了一些解释。你为什么要问?你为什么在乎?是你有改进它的自由。所以,获取它的源代码,研究它,改进它。。。。但是你确定它值得你花时间吗?但是你的例子没有产生OP所要求的输出。如果是这样的话,它将是由@chepner@Peter嗯,我想在chepner的帖子上加上我的评论。。但由于一些限制,我无法发表评论,因此我发表了一篇新的帖子。我尝试了一下,结果在我的网站上发表了与这篇文章相同的文章。这不对吗?“这不对吗?”——在我看来,是的。Stack Overflow不是为您的网站做广告的合适地方,据我所知,您的答案所增加的唯一贡献/附加值就是为您的网站做广告。完全脱离主题,在这里没有用处。(这与你是否可以发表评论无关,但在这个问题上,仅仅因为SO不允许你发表评论,这并不是你发表评论的理由,就像它是一个答案一样)。谢谢你让我知道。我会处理的。我想知道有没有办法处理这个错误,打印我们的自定义消息,然后让系统打印默认消息?有一个:
command\u not\u found\u handle(){fortune侮辱;return 127}
,当然,如果您有相关的fortune文件(来自
perl\u fortune
)。有点像sudo用错误的密码侮辱你
# 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

}