Powodowanie, że monit powłoki Linuksa wyświetla ostatnią zwracaną wartość

12

Obecnie pracuję na komputerze z systemem Linux, a monit powłoki pokazuje mi ostatnią zwracaną wartość i liczbę wykonanych poleceń (wraz z obrazem, z liczbami pokazanymi na fioletowo).

Mój komputer tego nie ma, jak mogę to skonfigurować?
Używam Xubunto, jeśli potrzebujesz więcej szczegółów, daj mi znać - nie jestem zbytnio użytkownikiem Linuksa (nie wiem, co jest tutaj istotne).

przykład

Eran
źródło
Jest to zbyt niejasne, aby odpowiedzieć. Jakie są te polecenia, które wykonujesz? Jaki komputer (OS) nie ma tego?
Chris Ting
Powiedziałem, że mój system operacyjny to Xubuntu i nie jest to związane z żadnym konkretnym poleceniem, to po prostu coś, co zawsze się wyświetla.
Eran

Odpowiedzi:

10

Wygląda na bashto, że jest domyślną powłoką Xubuntu .

Edytuj .bashrclub .bash_profile(w zależności od konfiguracji systemu) i poszukaj linii zaczynającej się od PS1=. Ta linia ustawia monit .

Aby dodać wartość zwracaną ostatniego polecenia, dodaj do tego wiersza:

`echo -n $?`

więc wygląda to tak jak poniżej (mój aktualny monit, uproszczony):

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

Będzie wyglądać tak, _będąc kursorem:

danielbeck in ~ (0)
 -> $ _

Alternatywnie możesz użyć zmiennej środowiskowej, PROMPT_COMMANDaby wstawić kod powrotu do pytania:

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

Spowoduje to dodanie np. (0)Tuż przed twoim niezmodyfikowanym monitem.


Otrzymujesz „licznik”, dodając \#do pytania: to numer polecenia . Bardziej przydatny może być numer historii , który nie zaczyna się od 1, ale pozwala wykonać dowolne polecenie, wprowadzając wykrzyknik, a następnie numer historii polecenia:

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

Po dodatkowej grze:

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

To pokaże wartość zwracaną tylko wtedy, gdy jest niezerowa, we własnej linii. Numer polecenia i numer historii znajdują się w tym samym wierszu, co polecenie, które zamierzasz wprowadzić:

danielbeck in /Users/danielbeck/Downloads
#1 !984 $ foo
-bash: foo: command not found
rc 127
danielbeck in /Users/danielbeck
#2 !985 $ _
Daniel Beck
źródło
5

Zmienna $?zawiera kod wyjścia dla ostatniego uruchomionego programu.

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

Myślę, że można uzyskać „liczbę wykonanych poleceń” za pomocą inkrementatora

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

Następnie musisz zmodyfikować zmienną PS1 / PS2 w .bashrc, aby zmienić monit. To wydaje się być porządnym przewodnikiem (oprócz tego, że zaleca modyfikację / etc / bashrc, po prostu zrobiłbym ~ / .bashrc).

Matt
źródło
1
Dzięki, spróbuję później, kiedy będę na własnym komputerze i zobaczę, jak to będzie.
Eran
1

Do Twojej wiadomości, jeśli używasz Zsh, jest to jeszcze łatwiejsze. Ta konstrukcja: %(?..%F{red}%?%f)oznacza, że ​​poziom błędów ostatnich poleceń jest wyświetlany na czerwono, jeśli nie jest zero (normalny), ale jeśli jest normalny, nic nie pokazuje. Środki konstrukcyjne %(1j.[%j].)pokazują bieżącą liczbę zadań w tle w nawiasach kwadratowych.

Keith
źródło