Fare in modo che il prompt della shell Linux mostri l'ultimo valore restituito


12

Sono attualmente su una macchina Linux e il prompt della shell mi sta mostrando l'ultimo valore di ritorno e il numero di comandi eseguiti (immagine inclusa, con questi numeri mostrati in viola).

Il mio computer non ha questo, come posso configurarlo?
Sto usando Xubunto, se sono necessari ulteriori dettagli fammelo sapere - non sono un utente Linux (non so cosa sia rilevante qui).

esempio


È troppo vago per rispondere. Quali sono questi comandi che stai eseguendo? Qual è il tuo computer (SO) che non ha questo?
Chris Ting,

Ho detto che il mio sistema operativo è Xubuntu e questo non è correlato a nessun comando specifico, è solo qualcosa che viene sempre mostrato.
Eran,

Risposte:


10

Sembra che bashsia la shell predefinita di Xubuntu .

Modifica .bashrco .bash_profile(a seconda della configurazione del tuo sistema) e cerca una riga che inizia con PS1=. Questa riga imposta il tuo prompt .

Per aggiungere il valore restituito dell'ultimo comando, aggiungere quanto segue a quella riga:

`echo -n $?`

quindi appare come il seguente (il mio prompt attuale, semplificato):

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

Sarà simile a questo, con _il cursore:

danielbeck in ~ (0)
 -> $ _

In alternativa, è possibile utilizzare la variabile di ambiente PROMPT_COMMANDper anteporre il codice di ritorno al prompt:

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

Questo aggiungerà, ad esempio, (0)poco prima del tuo prompt altrimenti non modificato.


Ottieni il "contatore" aggiungendo \#al tuo prompt: è il numero del comando . Più utile potrebbe essere il numero di cronologia , che non inizia da 1, ma consente di eseguire qualsiasi comando immettendo un punto esclamativo, seguito dal numero di cronologia del comando:

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

Dopo qualche gioco aggiuntivo:

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

Questo mostrerà il valore di ritorno solo se è diverso da zero, sulla sua riga. Il numero di comando e il numero di cronologia si trovano sulla stessa riga del comando che si intende inserire:

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

5

La variabile $?contiene il codice di uscita per l'ultimo programma eseguito.

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

Penso che tu possa ottenere il "numero di comandi eseguiti" usando un incrementatore

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

Quindi dovrai modificare la variabile PS1 / PS2 nel tuo .bashrc per cambiare il prompt. Questa sembra una guida decente (tranne che raccomanda di modificare / etc / bashrc, vorrei solo fare ~ / .bashrc).


1
Grazie, ci proverò più tardi quando sarò sul mio computer e vedrò come va.
Eran,

1

Cordiali saluti, se usi zsh è ancora più facile. Questo costrutto: %(?..%F{red}%?%f)significa mostrare gli ultimi comandi a livello di errore in rosso se non è zero (normale), ma se è normale non mostra nulla. Il costrutto %(1j.[%j].)significa mostrare il numero corrente di lavori in background tra parentesi quadre.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.