Inserir linha vazia entre os prompts da linha de comando

8

Ao usar a linha de comando, muitas vezes fica muito confuso. Tornando inconveniente examinar comandos passados ​​e suas saídas, por exemplo.

Gostaria de adicionar uma nova linha sempre que o prompt de comando for exibido. Igual a:

<clutter>
<blank line>
name@machine:~$

Eu uso o shell bash. Como isso pode ser alcançado?

Preguiça
fonte
1
Eu prefiro isso: lifehacker.com/5840450/…
Maerlyn

Respostas:

21

Uma maneira de conseguir isso é modificando o .bashrcarquivo. Simplesmente coloque o seguinte no final do .bashrcarquivo.

PS1="\n$PS1"

Para explicar como isso funciona, PS1é a variável que contém o que deve ser exibido como o prompt. Tudo isso está dizendo é "definido PS1para o conteúdo anterior de PS1, com um caractere de nova linha anexado". Colocá-lo na .bashrcmaioria das distros apenas faz com que o bash o execute sempre que você abre um shell interativo (mas não um shell de login - consulte Diferença entre o Shell de Login e o Shell Não-Login? ).

Preguiça
fonte
2
Para explicar como isso funciona, PS1 é a variável que contém o que deve ser exibido como o prompt. Tudo isso está dizendo é "configure PS1 para o conteúdo anterior do PS1, com um caractere de nova linha anexado".
Muzer 11/08
@Muzer Talvez o seu comentário possa ser uma edição
rpax 11/08
@rpax boa ideia, enviada. Também foi adicionado um pouco sobre o .bashrc.
Muzer 12/08/2015
Satisfatoriamente, a execução PS1="\n$PS1"em um terminal tem efeito imediato :)
mwfearnley
Funciona totalmente bem, exceto após entrar clear(ou pressionar Ctrl+l) a primeira linha mostrada é uma linha vazia. Para alguns, pode ser um pequeno detalhe, mas eu preferiria muito que a primeira linha fosse o prompt.
Robert Kusznier 13/08/19
6

Você pode usar PROMPT_COMMAND :

PROMPT_COMMAND="printf '\n';$PROMPT_COMMAND"

ou:

PROMPT_COMMAND="echo;$PROMPT_COMMAND"
cuonglm
fonte
2
O primeiro deveria ser PROMPT_COMMAND="printf '\n';$PROMPT_COMMAND"? Em sua forma atual, parece que não faço nada quando o coloquei no .bashrcarquivo.
Slothworks 11/08/2015
@ Slothworks: Sim, é claro, minha digitação incorreta foi corrigida.
precisa saber é
Mais de uma maneira de fazê-lo: :) Obrigado pela resposta.
Slothworks 11/08/2015
2
A alternativa do Slothworks é melhor, porque o seu executa um comando extra após cada comando executado na linha de comando. printfe echosão muito leves, é claro, mas ainda não faz sentido usar PROMPT_COMMANDquando PS1fará o trabalho.
Mikkel
Observe que, se você quiser colocar algo no comando que seja alterado sempre que executar o prompt, desejará PROMPT_COMMAND e não o PS1. Isso é comumente usado com o git para exibir qual ramificação do repositório está ativa. Sugestões do Google para PROMPT_COMMAND para ver o que pode ser feito.
Walter Walter
4

Alternativa: deixe uma linha no PS1=prompt do seu .bashrc. Aqui está literalmente como eu configuro .bashrcem todas as máquinas Linux que tenho:

PS1=' 
serg@ubuntu [$(pwd)]
================================
$ '

Como você pode ver no meu exemplo acima, o nome de usuário é codificado no prompt. É claro que você pode usar seqüências de escape que o bash ou outro shell (por exemplo, ksh ) fornece, mas uma opção um pouco mais neutra seria usar a substituição de parâmetros com comandos como whoami(reporte seu nome de usuário) e hostname(obviamente, reporta o nome do host). Por exemplo:

PS1='
$(whoami)@$(hostname):$(pwd)
$ '

Para mais coisas divertidas com o prompt,, .bashrce expansões de parâmetros, confira minhas respostas aqui:

Como verificar o status da bateria usando o terminal?

Como faço para que meus terminais / invólucros tenham designs personalizados? e

Como mostrar um relógio de corrida no terminal antes do prompt de comando?

Sergiy Kolodyazhnyy
fonte
Por que o nome de usuário e o nome da máquina são codificados? Seria bom se eles foram parametrizada
rpax
@rpax meu nome de usuário atual é diferente. Esse é o meu nome que você vê no prompt. O nome da máquina também é diferente.
Sergiy Kolodyazhnyy 11/08/2015
Eu quis dizer algum tipo de $(whoami)em vez deusernamehardcoded
rpax
@ rpax oh, isso pode ser feito também. Vou incluí-lo na minha resposta #
Sergiy Kolodyazhnyy
4
Observe que você pode usar \ue \hpara seu nome de usuário e nome de host, respectivamente. Você pode ver mais caracteres especiais (por exemplo, a hora atual em vários formatos) aqui
Yossarian