Como encurtar meu prompt de linha de comando (bash)?

167

Atualmente é:

michael@Castle2012-Ubuntu-laptop01:~/Dropnot/webs/rails_v3/linker/spec/controllers$

Fora de renomear minha máquina e estrutura de diretórios ...

Como eu poderia fazer com que fosse algo mais como:

michael:controllers$
Michael Durrant
fonte

Respostas:

241

Para alterá-lo apenas para a instância atual do terminal

Basta entrar PS1='\u:\W\$ 'e pressionar enter.


Para mudar "permanentemente"

No seu ~/.bashrc, encontre a seguinte seção:

if ["$ color_prompt" = yes]; então
    PS1 = '$ {debian_chroot: + ($ debian_chroot)} \ [\ 033 [01; 32m \] \ u @ \ h \ [\ 033 [00m \]: \ [\ 033 [01; 34m \] \ w \ [\ 033 [00m \] \ $ '
outro
    PS1 = '$ {debian_chroot: + ($ debian_chroot)} \ u @ \ h: \ w \ $'
fi

Remova o @\he substitua-o \wpor um maiúsculo \W, para que ele se torne:

if ["$ color_prompt" = yes]; então
    PS1 = '$ {debian_chroot: + ($ debian_chroot)} \ [\ 033 [01; 32m \] \ u \ [\ 033 [00m \]: \ [\ 033 [01; 34m \] \ W \ [\ 033 [00m \] \ $ '
outro
    PS1 = '$ {debian_chroot: + ($ debian_chroot)} \ u: \ W \ $'
fi

Salve, saia, feche o terminal e inicie outro para ver o resultado.


Toneladas mais opções!

  • Veja aqui um tutorial mais abrangente, com muitas mais opções
  • Veja esta resposta para usar um pequeno script Python para definir o prompt, para que a redução só ocorra quando você estiver envolvido em uma estrutura de diretórios.
ish
fonte
1
Você também pode ter um monte de informações ... e então um retorno de carro no final como em unix.stackexchange.com/q/88780/10043
Michael Durrant
Existe uma maneira de tornar isso global? Em outras palavras, se eu sudo para outro usuário, essa configuração é transferida, mas apenas para mim (ou seja, não para o usuário quando ele normalmente usa sua conta)?
Ctote 14/05
Para se ter uma .bashrc compartilhado que funciona tanto em Linux e OSX Eu já mudou para unix.stackexchange.com/a/127800/10043
Michael Durrant
ie HOST='\033[02;36m\]\h' HOST=' '$HOST parse_git_branch () { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'; } TIME='\033[01;31m\]\t \033[01;32m\]' LOCATION=' \033[01;34m\]pwd | sed "s # (/ [^ /] \ {1, \} / [^ /] \ {1, \} / [^ /] \ {1, \} /). * (/ [^ /] \ { 1, \} / [^ /] \ {1, \}) / \ {0,1 \} # \ 1_ \ 2 # g "' BRANCH=' \033[00;33m\]$(parse_git_branch)\[\033[00m\]\n\$ ' PS1=$TIME$USER$HOST$LOCATION$BRANCH PS2='\[\033[01;36m\]>'
Michael Durrant
mas veja a resposta para o código real a ser usado.
Michael Durrant
104

Execute este código no terminal atual

PROMPT_DIRTRIM=3

Agora, o prompt do bash mostrará apenas os três últimos nomes de diretório. Você pode escolher 1 para mostrar apenas o diretório atual. Mais informações estão disponíveis na documentação do GNU .

O efeito:

/var/lib/apt/lists# PROMPT_DIRTRIM=3
/.../lib/apt/lists# 

Se você deseja torná-lo permanentemente, adicione a seguinte linha ~/.bashrcno início:

PROMPT_DIRTRIM=3

ou outro número maior que zero.

santosh Mahto
fonte
7
Apenas um sidenote: Isto requer Bash 4.
Stefan Lasiewski
Bom ... eu adicionei um bach_alias para isso (com uma função) promptdir() { PROMPT_DIRTRIM=$1; }apenas para fazer viver mais fácil ...
dgoosens
18

Esta é minha configuração de prompt preferida:

adicionado em ~/.bashrc

PS1='[\u@\h \W]\$ '    

Se parece com isso:

[user@hostname dirname]$

(com um espaço após o $sinal)

desagradável
fonte
Como eu adicionaria um espaço entre cada palavra? Além disso, posso colorir?
Daniel Springer
6

Pessoalmente, prefiro ver apenas a pasta atual no prompt do bash. Eu posso fazer isso com o seguinte comando:

PS1='\W\$ '

Se você deseja que ele entre em vigor após cada inicialização, adicione o comando acima ao seu ~ / .bashrc.

Rajeev Jayaswal
fonte
1

Sei que isso é super antigo, mas como ninguém sugeriu a criação de um alias, achei que eu postaria. Usando sequências de escape do prompt do Bash, criei um aliasshorten

Em ~/.bash_aliasesaqui você vai notar a var $ Azul para definir a cor rápida que você pode omitir ou alterar com base na preferência Eu também limpar o terminal ao chamar encurtar.

alias c='clear'

alias shorten='PS1="$Blue$USER:\W$ "&& c'

Para obter a sequência de prompt desejada do OP:

alias shorten='PS1="$USER:\W$ "'

Eu tenho cores definidas na ~/.bashrccópia e coladas em https://wiki.archlinux.org/index.php/Color_Bash_Prompt . Em uma nota lateral, o que há com cores de código ansi? Estou confuso só de olhar.

Blue='\e[0;34m'         # Blue
Allie Carver
fonte
Um guia passo a passo para isso seria tão útil quanto eu não tenho idéia de como chegar a .bash_aliases. Obrigado
Kayote
2
"." prefixo indica um diretório ou arquivo oculto. O til "~" é uma forma abreviada da variável $ HOME. Portanto, "~ / .bash_aliases" é apenas uma forma curta de "/home/$USER/.bash_aliases". Para abrir ".bash_aliases", você pode abrir um terminal e digitar "gedit /home/$USER/.bash_aliases" ou "gedit ~ / .bash_aliases" ou em seu diretório pessoal, digite ctrl-h para mostrar arquivos ocultos e abrir diretamente o arquivo . Espero que ajude. Você também pode fazer uma pesquisa no Google por aliases úteis.
Allie Carver
0

Eu escrevi uma função que você pode modificar para atender às suas necessidades:

function termprompt() {
    PS1="${PS1//@\\h/}"     # Remove @host
    PS1="${PS1//\\w/\\W}"   # Change from full directory to last name
}

Coloque esta função na parte inferior da ou ~/.bashrcapós a PS1linha ter sido totalmente calculada.

Você digitaria termpromptsempre que quisesse encurtar seu prompt ou termpromptligaria da parte inferior do seu ~/.bashrcpara obter permanência.

A vantagem dessa técnica em relação a muitas outras respostas é a .bashrcconfiguração PS1de quatro maneiras diferentes (xterm + sem cor, xterm + cor, sem xterm + sem cor, sem xterm + cor). Esta resposta suporta todos os quatro métodos atuais e, provavelmente, métodos futuros também.

Outra vantagem é que esse método possui códigos de controle menos complexos para percorrer para inserir suas alterações.

WinEunuuchs2Unix
fonte