Em um sistema com o Ubuntu 14.04 e bash
, tenho a PS1
variável terminando com o seguinte conteúdo:
\u@\h:\w\$
para que o prompt apareça como
user@machinename:/home/mydirectory$
Às vezes, no entanto, o diretório atual tem um nome longo ou está dentro de diretórios com nomes longos, de modo que o prompt se parece com
user@machinename:/home/mydirectory1/second_directory_with_a_too_long_name/my_actual_directory_with_another_long_name$
Isso preencherá a linha no terminal e o cursor irá para outra linha, o que é irritante.
Em vez disso, gostaria de obter algo como
user@machinename:/home/mydirectory1/...another_long_name$
Existe uma maneira de definir a PS1
variável para "quebrar" e "compactar" o nome do diretório, para nunca exceder um certo número de caracteres, obtendo um prompt mais curto?
Respostas:
Primeiro de tudo, você pode simplesmente querer mudar o
\w
com\W
. Dessa forma, apenas o nome do diretório atual é impresso e não o caminho inteiro:Isso ainda pode não ser suficiente se o próprio nome do diretório for muito longo. Nesse caso, você pode usar a
PROMPT_COMMAND
variável para isso. Essa é uma variável bash especial cujo valor é executado como um comando antes de cada prompt ser mostrado. Portanto, se você definir isso como uma função que define o prompt desejado com base no comprimento do caminho do diretório atual, poderá obter o efeito que deseja. Por exemplo, adicionar essas linhas ao seu~/.bashrc
:O efeito é assim:
fonte
Adicionar um retorno de personagem é minha principal solução para isso.
Portanto, meu prompt (que tem outras coisas também, tornando-o ainda mais longo) fica assim:
Você notará que o $ está sendo retornado como uma nova linha
Eu alcanço isso com
Observe que, embora em uma linha separada, árvores de diretório super longas, como
/home/durrantm/Dropbox/96_2013_archive/work/code/ruby__rails
são encurtados paraou seja, "três principais diretórios / _ / dois diretórios inferiores", que é geralmente o que me interessa
Isso garantirá que a linha nunca fique muito longa devido ao comprimento da árvore de diretórios. Se você sempre deseja a árvore de diretórios completa, basta ajustar LOCATION, ou seja,
fonte
$
? (Veja isso .)Criado ~ / .bash_prompt:
Adicionado no meu ~ / .bash_profile:
A saída é:
fonte
Não é uma solução para encurtar caminhos longos, mas uma maneira conveniente de obter uma melhor visão geral, mantendo todas as informações do caminho visíveis, é adicionar uma nova linha antes do último caractere. Dessa forma, o cursor começa sempre na mesma coluna, mesmo que o caminho seja longo o suficiente para contornar, mas a (s) janela (s) do console devem ser altas o suficiente para não rolar as linhas anteriores muito rapidamente. Eu removi os códigos de cores para obter mais clareza:
fonte
Eu uso isso, ele envolve várias linhas e recuos pelo comprimento de
user@host
modo que assume que a correntePS1
é efetivamente '\u@\h:\w$
'. Não trunca o caminho e se adapta à largura atual do terminal. Ele apenas divide o caminho/
, portanto, não lida com diretórios realmente longos (mas preserva espaços para seleção / cópia). Isso garante que você sempre tenha pelo menos um espaço de 20 caracteres disponível para entrada.Isso funciona retirando e substituindo a mágica
\w
( substituindo-a apenas\w$
por isso)PS1
e$PWD
, em seguida, agrupando-a como uma sequência simples de caracteres. Ele recalculaPS1
cada vez que o valor original é salvo_PS1
, isso significa que escapes "invisíveis" também são preservados, minha string de prompt original completa paraxterm
e prompt em negrito:E o resultado final em um terminal de 80 colunas:
Isso funciona do bash-3.2 conforme
printf -v var
é usado. Devido a várias complexidades , será necessário algum ajuste para outras variações dePS1
.(O caminho na barra de título do xterm não é encapsulado nem abreviado, algo que pode ser feito incorporando uma das outras respostas aqui à função acima.)
fonte
Como alternativa, no meu arquivo .zshrc, abrevio a primeira letra de cada diretório se a largura do pixel estiver acima de uma certa largura:
torna-se:
Aqui está a função zsh para fazer isso:
Na verdade, eu uso isso para atualizar o título do terminal para que, com várias guias, eu possa manter em linha reta qual é qual. O .zshrc completo para fazer isso está aqui .
Isso é muito útil, pois mantém o contexto e no zsh permite que você rapidamente complete um diretório no mesmo formato. (por exemplo, a digitação
cd /h/m/s/<tab>
será concluída automaticamentecd /home/mydirectory1/second_directory
)fonte
Tente usar este script Python . Ele corta seções individuais do nome do caminho, exatamente como você queria na sua pergunta. Ele também usa as reticências unicode que ocupam apenas uma coluna em vez de três.
Exemplo de saída para o seu caminho (quando recebe um limite de 30 caracteres):
Vale a pena notar que esta solução manipula corretamente Unicode em nomes de diretório usando
wcswidth
.${#PWD}
, que outras respostas usaram, avaliarão mal a largura visual de qualquer caminho que contenha caracteres UTF-8.fonte