Eu sou novo no bash e gostaria que meu prompt mostrasse algo que no tcsh era trivial, mas depois de uma boa pesquisa no google ainda não consigo fazer.
Gostaria que meu prompt incluísse apenas os diretórios atual e pai como este:
/parent/currentdir $
No tcsh, isso é alcançado por:
set prompt = "%C2 %"
No entanto, no bash até agora, só descobri que tenho que analisar o pwd para obter a mesma saída.
Não existe uma maneira mais simples, como fazer:
export PS1="$(some_command) $"
PS1='\w \$'; PROMPT_DIRTRIM=2
deve fornecer o equivalente ao bash, mas isso não funciona corretamente no meu sistema.PROMPT_DIRTRIM
foi introduzido no Bash 4 . Acabei de testar no Ubuntu 16.04 sob WSL e funcionou muito bem!Respostas:
Os recursos de controle de prompt do Bash são bastante estáticos. Se você quiser mais controle, poderá incluir variáveis em seu prompt; verifique se você não desativou a
promptvars
opção .Observe as aspas simples: as expansões da variável devem ocorrer no momento em que o prompt é exibido, não no momento em que a
PS1
variável é definida.Se você deseja ter mais controle sobre o que é exibido, pode usar substituições de comando. Por exemplo, o trecho acima perde a
~
abreviação do diretório inicial.Este código é um pouco complicado, então em vez de furá-lo para a
PS1
variável, você pode usar aPROMPT_COMMAND
variável para executar o código de conjuntoHPWD
e, em seguida, usar isso em seu prompt.Como o prompt reduzido só foi alterado em uma alteração de diretório, você não precisa recalculá-lo sempre que um prompt é exibido. O Bash não fornece um gancho que é executado em uma alteração de diretório atual, mas você pode simulá-lo substituindo
cd
seus primos.Observe que você não precisa exportar e não deve exportar
PS1
, pois é uma configuração de shell, não uma variável de ambiente. UmaPS1
configuração do bash não seria entendida por outras conchas.PS Se você deseja uma boa experiência de shell interativa, mude para zsh , onde todos esses (
%
expansões rápidas que abrangem amplamente o tcshchpwd
, etc.) são recursos nativos.fonte
A sintaxe para obter os diretórios pai e atual é extraída do arquivo Munai resposta .
No entanto, como observado por Gilles, esse código mostra apenas o diretório atual no momento
.bashrc
é carregado, mas não muda conforme você navega no sistema para outras pastas.Tendo isso em seu
.bashrc
arquivo, o prompt é atualizado automaticamente para o diretório atual:fonte
prompt_command()
suposto fazer algo por si só? Não é para mim. Você queria usar tambémprompt_command()
nas redefinições decd
& co, como Gilles? Ou você quis dizerPROMPT_COMMAND='...'
?$PWD
contém um espaço./
? Como está escrito, você recebe/// $
A sequência de prompt pode ser facilmente alterada
bash
editando a variável shellPS1
. Significa Prompt String 1. Mais informações aqui .Por enquanto, ative sua
bash
concha.vi ~/.bashrc
Anexe a definição PS1 no arquivo
Mais tutoriais aqui e aqui , para ajudá-lo a ajustá-lo ainda mais.
fonte
.bashrc
é carregado; o prompt não será alterado se vocêcd
entrar em outro diretório! @twalbaumPode ser mais simples com "~" para o diretório Home.
fonte
fonte
A configuração
PROMPT_DIRTRIM=2
deve ser tudo o que você precisa.fonte