程序执行后打印返回值

程序执行后打印返回值

我想知道如何设置选项以便在终端每次执行程序后自动打印返回值而无需输入echo $?

这是可以设置的东西吗?Codeblocks 有这个功能。

答案1

是的,有两种方法。一种是设置PROMPT_COMMAND.bashrc另一种是设置命令PS1替换echo $?

方法 1:

来自 bash 手册页:

PROMPT_COMMAND

      If set, the value is executed as a command prior to issuing each
      primary prompt.

无论你将这个变量设置为什么,它都会在每次绘制提示之前运行。演示:

$> PROMPT_COMMAND=" echo 'Last command exited with'  \$? 'code'  "
Last command exited with 0 code
$> ls /etc/passwd > /dev/null
Last command exited with 0 code
$> ls /etc/asdf > /dev/null
ls: cannot access /etc/asdf: No such file or directory
Last command exited with 2 code
$> 

注意使用\$?。如需永久更改,请将其保存在.bashrc

方法 2

假设我的PS1提示设置如下:

PS1='
user@ubuntu:$> '

如果我想在每次屏幕上重新绘制此提示时(即在每个前面的命令运行之后)运行某个程序,我需要command substitution $(. . .) 在提示中使用和设置它,如下所示:

PS1=' [ $? ] 
user@ubuntu: $> '

演示:

$> PS1=' [ $? ]
> $>_ '
 [ 0 ]
$>_ ls /etc/passwd > /dev/null
 [ 0 ]
$>_ ls /etc/asdf > /dev/null                                                                                                      
ls: cannot access /etc/asdf: No such file or directory
 [ 2 ]
$>_ 

请注意,我将 PS1 分成两行,顶部有[ exitcode ]和 底部 $> <blank space>'。这就是为什么第二行有>之前$> '(前导>PS2多行命令的提示)。或者,您可以执行类似的操作(注意结构$'...'):

  $> PS1=$'[ $? ] \n$> '                                                                                                  
[ 0 ] 
$> 

答案2

我从中挑选的方法Arch 维基trap ERRtrap在 Bash 中用于在收到信号或发生某些其他事件时运行命令。ERR当前命令行因错误终止时,将运行陷阱 - 返回值不为 0。(如果它确实正常终止,则返回值显然为 0。)

例如:

trap 'printf "\ncode %d\n\n" $?' ERR

然后:

$ echo foo
foo
$ false

code 1

$

(注意:echo命令成功运行后没有消息 -当我输入命令但终端没有任何反应时,这意味着什么?

Arch Wiki 提示继续对消息进行彩色处理,以便您收到明显的黄色消息:

EC() { echo -e '\e[1;33m'code $?'\e[m\n'; }
trap EC ERR

影响:

在此处输入图片描述

实际上,我需要做的就是留意code输出中的黄色以了解命令失败。

相关内容