为什么 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 代码对脚本最有用,因此您可以编写处理错误情况的脚本。
我有一个用 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 代码对脚本最有用,因此您可以编写处理错误情况的脚本。