Eu normalmente tenho apenas o nome do diretório atual no meu prompt bash ( PS1='\u@\h:\W$ '
), então se eu estiver ~/projects/superapp/src/
Eu recebo:
hamish@host:src$
No entanto, gostaria de ter uma indicação do caminho completo sem ter o caminho completo. Eu vi capturas de tela em que as pessoas teriam
hamish@host:~/p/s/src$
se no diretório de exemplo acima. Então, qual valor do PS1 daria isso? Ou, na falta disso, qual script eu preciso na minha .bashrc
produzir isso?
bash
command-line
bashrc
Hamish Downer
fonte
fonte
Respostas:
Ok, fiquei curioso, então aqui está uma solução:
\$(function_name)
no local apropriado.Como um exemplo:
Espero que alguém mais habilidoso no Bash-scripting do que eu possa sugerir maneiras de limpar a função, mas isso deve lhe dar uma idéia de como usar a saída de outro comando (ou função Bash) em um prompt. Veja também aqui: http://www.linux.org/docs/ldp/howto/Bash-Prompt-HOWTO/x279.html
Com base no seu comentário, olhei de novo e percebi que minha solução precisava ser citada em dobro. Se você citar uma dessas funções, ela não funcionará.
fonte
PROMPT_COMMAND
como na minha solução, caso contrárioPS1
será definido quando você iniciar o bash e não será alterado quando você alterar o diretório.cd
. Eu estou usando agora. (E isso não é uma coisa do Perl. Tem a ver com o funcionamento do PS1. Você pode ter informações dinâmicas lá em uma função via\$(function)
.Eu gosto da abordagem do meowsqueak, tentando ficar no bash para o desempenho. Mas eu queria que meu caminho abreviasse nomes longos de diretórios para um caractere.
Isso é baseado na solução do meowsqueak. Ele pode suportar algumas melhorias / mais recursos, mas resolve o problema básico sem disparar o sed.
Isto está em um arquivo executável, por exemplo ~ / bin / ps1
No meu .bash_profile eu então tenho
fonte
RESIDUAL=${PWD#$HOME}
até mesmo o sintaxe highlighter diz que é funky com o # commentEu reescrevi isso recentemente, baseado em outro script que eu escrevi anos atrás - este é otimizado para rodar dentro do bash o máximo possível, para evitar garfos caros. Foi quase 8x mais rápido que minha função antiga que usava o awk / sed.
Produz bons resultados. Ele mantém a parte pwd do prompt em no máximo MAX_PWD_LENGTH caracteres e, se você estiver em um subdiretório de $ HOME, isso também ficará claro:
Exemplos:
A função bash (chamar isso ao construir sua variável PS1):
EDIT: bug fixo com comprimento absoluto de string
fonte
forçará \ w a expandir para o máximo de três elementos à direita do caminho do diretório de trabalho atual, com o precedente, se houver, substituído por "...".
fonte
Basta adicionar isso (e editar como quiser) ao seu
.bashrc
:fonte
PS1
uma vez quando você começar o bash e não irá atualizá-lo depois disso. Então você vai mudar de diretório e seu prompt não vai mudar - eu cometi esse erro e, em seguida, estava jogando e tive que coçar a cabeça para resolvê-lo. Veja minha (editado) resposta para uma maneira de contornar isso usandoPROMPT_COMMAND
echo $PS1
dá: \ u @ \ h: 'pwd | sed -e "s / \ / (.) [^ \ /] \ + / \ / \ 1 / g" '\ $ então não é codificado na variável (não sei como sobrescrever essa marcação, apenas substitua 'por `).Eu fiz um pouco mais de googling nesse meio tempo, e depois de passar por alguns termos de pesquisa, me deparei com Este artigo que menciona o concha de peixe faz o que eu quero e forneceu uma maneira de fazer isso. Eu o modifiquei para que o usuário e o host também sejam exibidos e acabem com o razoavelmente sucinto:
Basicamente toda vez que o prompt está prestes a ser exibido,
PROMPT_COMMAND
irá definir$CurDir
para o caminho do diretório abreviado que é então usado em$PS1
. Lembre-se de que, sePROMPT_COMMAND
é definido em outro lugar, você precisará adicionar o comando acima ao final daquele, precedido por um;
. Então, para o exemplo comum de configurar o título de um xterm, você terminaria comAlgumas outras maneiras possíveis de abreviar o caminho podem ser encontradas:
fonte
Outra versão do @Telemachus short_pwd (), sem requisito de perl.
fonte
Tente isto:
Transforma
para
transformar
para
E quando
$PWD
igual a$HOME
, não mostre nada.Bônus: você pode modificar o número de tamanho para atender às suas necessidades.
fonte