Fazendo o shell do Linux mostrar o último valor de retorno

12

Atualmente estou em uma máquina Linux e o prompt do shell está me mostrando o último valor de retorno e o número de comandos executados (imagem incluída, com esses números mostrados em roxo).

Meu próprio computador não tem isso, como posso configurá-lo?
Estou usando o Xubunto, se mais detalhes forem necessários, deixe-me saber - não sou muito usuário de Linux (não sei o que é relevante aqui).

    
por Eran 30.05.2011 / 19:09

3 respostas

10

Parece que bash é o shell padrão do Xubuntu .

Edite .bashrc ou .bash_profile (dependendo da configuração do sistema) e procure uma linha que comece com PS1= . Esta linha define seu prompt .

Para adicionar o valor de retorno do último comando, adicione o seguinte à linha:

'echo -n $?'

por isso, por exemplo, como o seguinte (meu prompt atual, simplificado):

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

Será parecido com este, com _ sendo o cursor:

danielbeck in ~ (0)
 -> $ _

Como alternativa, você pode usar a variável de ambiente PROMPT_COMMAND para preceder o código de retorno ao seu prompt:

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

Isso adicionará, e. (0) antes de seu prompt não modificado de outra forma.

Você obtém o "contador" adicionando \# ao seu prompt: é o número do comando . Mais útil pode ser o número do histórico , que não começa em 1, mas permite que você execute qualquer comando inserindo um ponto de exclamação, seguido pelo número do histórico do comando:

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

Após algumas jogadas adicionais:

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

Isso só mostrará o valor de retorno se for diferente de zero, em sua própria linha. O número do comando e o número do histórico estão na mesma linha que o comando que você vai digitar:

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

A variável $? contém o código de saída do último programa de execução.

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

Eu acho que você pode obter o "número de comandos executados" usando um incrementador

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

Em seguida, você precisará modificar a variável PS1 / PS2 em seu .bashrc para alterar o prompt. Este parece ser um guia decente (exceto recomenda modificar / etc / bashrc, gostaria apenas de fazer ~ / .bashrc).

    
por 30.05.2011 / 19:18
1

FYI, se você usar o zsh, será ainda mais fácil. Esta construção: %(?..%F{red}%?%f) significa mostrar o último erro errorlevel em vermelho se não for zero (normal), mas se é normal não mostra nada. A construção %(1j.[%j].) significa mostrar o número atual de jobs em segundo plano entre colchetes.

    
por 31.05.2011 / 04:39