Hacer que el indicador de shell de Linux muestre el último valor de retorno

12

Actualmente estoy en una máquina Linux y el indicador de shell me muestra el último valor de retorno y la cantidad de comandos ejecutados (imagen incluida, con estos números en púrpura).

Mi propia computadora no tiene esto, ¿cómo puedo configurarlo?
Estoy usando Xubunto, si se necesitan más detalles, hágamelo saber: no soy un gran usuario de Linux (no sé qué es relevante aquí).

ejemplo

Eran
fuente
Esto es demasiado vago para responder. ¿Cuáles son estos comandos que estás ejecutando? ¿Cuál es su computadora (SO) que no tiene esto?
Chris Ting
He dicho que mi sistema operativo es Xubuntu, y esto no está relacionado con ningún comando específico, es algo que siempre se muestra.
Eran

Respuestas:

10

Parece que bashes el shell predeterminado de Xubuntu .

Edite .bashrco .bash_profile(según la configuración de su sistema) y busque una línea que comience con PS1=. Esta línea establece su solicitud .

Para agregar el valor de retorno del último comando, agregue lo siguiente a esa línea:

`echo -n $?`

por lo que se ve, por ejemplo, como el siguiente (mi indicador actual, simplificado):

PS1='\u in \w (`echo -n $?`)\n -> \$ '

Se verá así, _siendo el cursor:

danielbeck in ~ (0)
 -> $ _

Alternativamente, puede usar la variable de entorno PROMPT_COMMANDpara anteponer el código de retorno a su solicitud:

export PROMPT_COMMAND='RET=$?; echo -n "($RET) "'

Esto agregará, por ejemplo, (0)justo antes de su solicitud de otra manera no modificada.


Obtiene el "contador" agregando \#a su solicitud: es el número de comando . Más útil podría ser el número de historial , que no comienza en 1, pero le permite ejecutar cualquier comando ingresando un signo de exclamación, seguido del número de historial del comando:

984 $ foo
-bash: foo: command not found
985 $ !984
foo
-bash: foo: command not found
986 $ _

Después de jugar un poco más:

PS1='`RET=$?; if [ $RET != 0 ] ; then echo "rc $?"; fi`\n\u in `pwd`\n#\# !\! \$ '

Esto solo mostrará el valor de retorno si no es cero, en su propia línea. El número de comando y el número de historial están en la misma línea que el comando que va a ingresar:

danielbeck in /Users/danielbeck/Downloads
#1 !984 $ foo
-bash: foo: command not found
rc 127
danielbeck in /Users/danielbeck
#2 !985 $ _
Daniel Beck
fuente
5

La variable $?contiene el código de salida para el último programa ejecutado.

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

Creo que puede obtener el "número de comandos ejecutados" utilizando un incrementador

ninth:~ sakkaku$ echo $[numcommands++]
0
ninth:~ sakkaku$ echo $[numcommands++]
1
ninth:~ sakkaku$ echo $[numcommands++]
2
ninth:~ sakkaku$ echo $[numcommands++]
3

Luego, deberá modificar la variable PS1 / PS2 en su .bashrc para cambiar la solicitud. Esto parece una guía decente (excepto que recomienda modificar / etc / bashrc, simplemente haría ~ / .bashrc).

Mate
fuente
1
Gracias, lo intentaré más tarde cuando esté en mi propia computadora y veré cómo funciona.
Eran
1

Para su información, si usa zsh es aún más fácil. Esta construcción: %(?..%F{red}%?%f)significa mostrar el último nivel de error de comandos en rojo si no es cero (normal), pero si es normal, no mostrar nada. Los %(1j.[%j].)medios de construcción muestran el número actual de trabajos en segundo plano entre corchetes.

Keith
fuente