Почему zsh скрывает вывод ошибок из программы ac? - PullRequest
2 голосов
/ 30 сентября 2019

У меня есть программа, написанная на 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 с темой космического корабля, если это поможет.

Ответы [ 2 ]

1 голос
/ 30 сентября 2019

Есть идеи, как заставить zsh вывести сообщение об ошибке?

Результат последней команды сохраняется в переменной оболочки ?, поэтому вы можете напечатать ее с чем-то вродеprint $? или echo $?. Как и большинство оболочек, zsh невероятно настраивается, поэтому вы можете написать скрипт, который, например, включает в себя результат последней команды в вашем приглашении. Вот запись в блоге, в которой автор настраивает zsh для отображения ненулевых результатов в правильном приглашении: Показать код завершения последней команды в Zsh .

Или почему это не так? t для начала?

Команды оболочки обычно не дают сбой, и если они сталкиваются с ошибками, они обычно предоставляют более полезный вывод, чем просто код возврата самостоятельно. Код возврата наиболее полезен для сценариев, поэтому вы можете написать сценарий, который обрабатывает ошибки.

1 голос
/ 30 сентября 2019

но вывод ошибок не отображается в командной строке

Это не то, что ваша программа выводит на экран. Это оболочка, которая пишет это. Таким образом, оболочка не «скрывает» ее.

Я сам не использую zsh, но, поскольку красная стрелка указывает, что программа была аварийно завершена, я думаю, вы можете посмотреть на код для красной стрелки исоздать собственное сообщение. Вот вопрос о кодах ошибок, которые могут вам помочь: Какой код ошибки возвращает процесс, возвращаемый segfaults?

Я помню, что однажды я сделал настраиваемое приглашение bash с последним выходомкод. Возможно, я использовал это, но я не уверен: Приглашение Bash с кодом последнего выхода

Вот документация о том, как настроить приглашение для темы космического корабля: https://denysdovhan.com/spaceship-prompt/docs/Options.html#exit-code-exit_code

Я предполагаю, что вам нужно добавить exit_code в раздел SPACESHIP_PROMPT_ORDER в вашем файле .zshrc.

Есть идеи, почему?

Вы, вероятно,должен спросить разработчиков. Не менее актуален вопрос: «Почему bash печатает« ошибка сегментации »?»Это просто выбор дизайна. Bash не печатает адрес памяти, где произошла ошибка. Почему это?

Похоже, разработчики oh-my-zsh думали, что этого достаточно с красной стрелкой.

...