使 Linux shell 提示显示最后的返回值

Era*_*ran 13 linux unix shell prompt

我目前在一台 Linux 机器上,shell 提示符向我显示了最后一个返回值和执行命令的数量(包括图片,这些数字以紫色显示)。

我自己的电脑没有这个,如何配置?
我正在使用 Xubunto,如果需要更多详细信息,请告诉我——我不是 Linux 用户(我不知道这里有什么相关内容)。

例子

Dan*_*eck 11

似乎bash是 Xubuntu 的默认 shell

编辑.bashrc.bash_profile(取决于您的系统配置)并查找以PS1=. 此行设置您的提示

要添加最后一个命令的返回值,请将以下内容添加到该行:

`echo -n $?`
Run Code Online (Sandbox Code Playgroud)

所以它看起来像下面这样(我当前的提示,简化了):

PS1='\u in \w (`echo -n $?`)\n -> \$ '
Run Code Online (Sandbox Code Playgroud)

它看起来像这样,_作为光标:

danielbeck in ~ (0)
 -> $ _
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用环境变量PROMPT_COMMAND将返回代码添加到提示中:

export PROMPT_COMMAND='RET=$?; echo -n "($RET) "'
Run Code Online (Sandbox Code Playgroud)

这将(0)在您之前未修改的提示之前添加例如。


您可以通过添加\#到提示中来获得“计数器” :它是命令编号。更有用的可能是history number,它不是从 1 开始,但允许您通过输入感叹号来执行任何命令,后跟命令的历史编号:

984 $ foo
-bash: foo: command not found
985 $ !984
foo
-bash: foo: command not found
986 $ _
Run Code Online (Sandbox Code Playgroud)

经过一些额外的播放:

PS1='`RET=$?; if [ $RET != 0 ] ; then echo "rc $?"; fi`\n\u in `pwd`\n#\# !\! \$ '
Run Code Online (Sandbox Code Playgroud)

这只会在它自己的行上显示非零的返回值。命令编号和历史记录编号与您要输入的命令在同一行:

danielbeck in /Users/danielbeck/Downloads
#1 !984 $ foo
-bash: foo: command not found
rc 127
danielbeck in /Users/danielbeck
#2 !985 $ _
Run Code Online (Sandbox Code Playgroud)


Mat*_*att 5

该变量$?包含上次运行程序的退出代码。

ninth:~ sakkaku$ echo Hello World
Hello World
ninth:~ sakkaku$ echo $?
0
ninth:~ sakkaku$ cat asdasd
cat: asdasd: No such file or directory
ninth:~ sakkaku$ echo $?
1
Run Code Online (Sandbox Code Playgroud)

我认为您可以使用增量器获得“执行的命令数”

ninth:~ sakkaku$ echo $[numcommands++]
0
ninth:~ sakkaku$ echo $[numcommands++]
1
ninth:~ sakkaku$ echo $[numcommands++]
2
ninth:~ sakkaku$ echo $[numcommands++]
3
Run Code Online (Sandbox Code Playgroud)

然后您需要修改 .bashrc 中的 PS1/PS2 变量以更改提示。 似乎是一个不错的指南(除了它建议修改 /etc/bashrc,我只会做 ~/.bashrc)。