Sida 1 av 1

Upptäcka fel: statuskod i kommandoradsprompten

Postat: 21 okt 2008, 23:36
av David Andersson
Alla kommandon avslutar med en statuskod. Om kommandot gick bra så är status 0, om det gick fel är det ett positivt tal skilt från noll. Man kan manuellt kolla statuskoden från senaste kommandot genom att skriva echo $? direkt efter i samma terminalfönster. Ett smartare sätt att ha koll på statuskoden är att låta den visas automatiskt hela tiden: i prompten!

Nedan, succesivt mer avancerade promptar:

Intro till PS1

Prompten finns i variabeln PS1. Du kan sätta om prompten med följande kommando:

Kod: Markera allt

PS1='Och nu då? '
By default brukar man ha användarnamn (\u), datornamn (\h) och katalognamn (\w) i prompten. (\$ blir $ eller # beroende på om man är root eller ej)

Kod: Markera allt

PS1='\u@\h:\w\$ '
Jag gillar att bara visa sista delen av katalognamnet (\W) för att spara plats.

Kod: Markera allt

PS1='\u@\h:\W\$ '
Statuskod i PS1

$? och ${?} visar senaste statuskod. ${?#0} visar senaste statuskod om den är skild från 0.

Kod: Markera allt

PS1='${?#0} \u@\h:\W\$ '
Sådär, nu har du statuskod i prompten om senaste kommandot gick fel. Nu ska vi lägg till så att den visas i rött. Röd har ansi-kod ESC[31m (\e[31m). Avsluta färg med ESC[0m (\e[0m).

ESC-sekvenser måste omges med \[ och \] för att tala om för terminalen att sekvensen inte flyttar markören. (Terminalen måste hålla reda på var markören är så att man kan redigera kommandorader som är längre än 80 tecken.)

Så här kan du alltså sätta en prompt så att du lätt ser om ett kommando gick fel:

Kod: Markera allt

PS1='\[\e[31m\]${?#0}\[\e[0m\] \u@\h:\W\$ '
(Det går att utveckla prompten mycket mer. Men vi stannar här så länge.)

Om du är nöjd med resultatet, spara kommandot som sätter PS1 i filen ~/.bashrc.

Re: Upptäcka fel: statuskod i kommandoradsprompten

Postat: 22 okt 2008, 02:01
av djkmmo
Vilken trevlig HOWTO. Pedagogiskt skriven och välformulerad. Tummen upp!