Fazendo o prompt do 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 (figura incluída, com esses números mostrados em roxo).

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

exemplo

Eran
fonte
Isso é muito vago para responder. Quais são esses comandos que você está executando? Qual é o seu computador (SO) que não possui isso?
Chris Ting
Eu disse que meu sistema operacional é o Xubuntu, e isso não está relacionado a nenhum comando específico, é apenas algo que sempre é mostrado.
Eran

Respostas:

10

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

Edite .bashrcou .bash_profile(dependendo da configuração do sistema) e procure uma linha começando com PS1=. Esta linha define seu prompt .

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

`echo -n $?`

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

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

Ficará assim, com _o cursor:

danielbeck in ~ (0)
 -> $ _

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

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

Isso adicionará, por exemplo, um (0)pouco antes do prompt não modificado.


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 inicia em 1, mas permite executar qualquer comando digitando 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 do comando que você digitará:

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

A variável $?contém o código de saída para o ú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

Você precisará modificar a variável PS1 / PS2 no seu .bashrc para alterar o prompt. Este parece ser um guia decente (exceto que ele recomenda modificar / etc / bashrc, eu faria apenas ~ / .bashrc).

Matt
fonte
1
Obrigado, tentarei mais tarde quando estiver no meu próprio computador e ver como vai.
Eran
1

Para sua informação, se você usa o zsh, é ainda mais fácil. Esta construção: %(?..%F{red}%?%f)significa mostrar os últimos comandos em nível de erro em vermelho se não for zero (normal), mas se for normal não mostrar nada. Os %(1j.[%j].)meios de construção mostram o número atual de trabalhos em segundo plano entre colchetes.

Keith
fonte