为什么 zsh 隐藏 c 程序的错误输出?

Why does zsh hide error output from a c program?

我有一个用 C 编写的程序失败了。当我运行它在zsh时,程序失败了,但它的错误输出没有显示在命令行中(注意第二个➜是红色的,表示执行失败):

hpsc-hw2-USER on  master 
➜ ./sort -a 405500

hpsc-hw2-USER on  master 
➜ 

然而,当我 运行 它在 bash 时,错误显示:

[USER@COMPUTER hpsc-hw2-USER]$ ./sort -a 405500
Segmentation fault (core dumped)

知道为什么吗?如果有帮助的话,我运行宁oh-my-zsh宇宙飞船主题。

but it's error output is not displayed in command line

这不是您的程序写入屏幕的内容。是 shell 写的。所以shell不是'hiding'吧。

我自己并没有使用zsh,但由于红色箭头表示程序异常终止,我想你可以查看红色箭头的代码并创建自定义消息。以下是可能对您有所帮助的错误代码问题:What error code does a process that segfaults return?

我记得我曾经自定义 bash 提示,显示最后的退出代码。也许我用过这个,但我不确定:Bash Prompt with Last Exit Code

这里是关于如何自定义宇宙飞船主题提示的文档:https://denysdovhan.com/spaceship-prompt/docs/Options.html#exit-code-exit_code

我假设您需要将 exit_code 添加到 .zshrc 文件中的 SPACESHIP_PROMPT_ORDER 部分。

Any idea why?

你可能得问问开发商。一个同样有效的问题是:"Why does bash print 'segmentation fault'?" 这只是一个设计选择。 Bash 不打印发生段错误的内存地址。这是为什么?

似乎 oh-my-zsh 的开发者认为红色箭头就足够了。

Any ideas how to make zsh output the error message?

最后一个命令的结果存储在 shell 变量 ? 中,所以你可以用 print $?echo $? 之类的东西打印它。与大多数 shells 一样,zsh 的可配置性令人难以置信,因此您可以编写一个脚本,例如在您的提示中包含最后一条命令的结果。这里有一篇博客post,其中作者配置zsh在正确的提示中显示非零结果:Show Exit Code of Last Command in Zsh.

Or why it doesn't do it to begin with?

Shell 命令通常不会崩溃,如果它们遇到错误,它们通常会提供比 return 代码本身更有用的输出。 return 代码对脚本最有用,因此您可以编写处理错误情况的脚本。