Como evitar til ~ no prompt do Bash?

12

Gostaria de remover o til da exibição na variável PS1.

Minha string PS1 atual:

PS1="\h:\w\n$"

E o prompt é assim:

lnx-hladky:/tmp/plugtmp
$

Não gosto que o diretório $ HOME seja exibido como til. Isso pode ser evitado?

Causa problemas, por exemplo:

lnx-hladky:~/DOC
$  

A documentação diz:

\w : the current working directory, with $HOME abbreviated with a tilde 
\W: the basename of the current working directory, with $HOME abbreviated with a tilde

Existe alguma possibilidade de evitar que $ HOME seja abreviado com um til?

Eu encontrei uma maneira de contornar, mas sinto que é muito complicado:

PROMPT_COMMAND='echo -ne "\e[4;35m$(date +%T)\e[24m$(whoami)@$(hostname):$(pwd)\e[m\n"'
PS1=$

Alguém pode propor uma solução melhor? Tenho a sensação de que não é muito bom executar tantos comandos apenas para ser rápido. (data, whoami, nome do host, pwd).

Jirka
fonte
que "problemas" o til causa no exemplo?
JBallin

Respostas:

11

o bash executa expansões no prompt; apenas certifique-se de escapar deles.

PS1='\h:$(pwd)\n$'
Ignacio Vazquez-Abrams
fonte
Isso responde à minha pergunta. Eu não sabia que existe essa possibilidade. Muito obrigado, Ignacio!
Jirka
2
@Jirka: Você também pode usar: `PS1 = '\ h: $ PWD \ n $'.
Pausado até novo aviso.
1
A solução de Jirka é executada pwda cada prompt. A solução de Dennis não apenas busca a variável de ambiente PWD, que é muito mais barata.
Stéphane Gourichon
2
pwdé um bash embutido. A afirmação que ${PWD}é "muito mais barata" do que $(pwd)é sem evidência.
Vineet
1
@anxieux: você tem que citar com aspas simples, e não aspas duplas
weberjn
0

Você não precisa executar tantos comandos como mostrou no seu exemplo. bashfornece atalhos para a maioria das coisas que você mencionou.

Seu exemplo:

PROMPT_COMMAND='echo -ne "\e[4;35m$(date +%T)\e[24m$(whoami)@$(hostname):$(pwd)\e[m\n"'
PS1=$

pode ser reescrito como:

PS1='\e[4;35m\t\e[24m\u@\h:\w\e[m\n'

Onde \tmostra a hora (no formato de 24 horas), \umostra o nome de usuário atual, '\ h' mostra o nome do host - a bashpágina de manual discute isso e o restante das fugas disponíveis para o seu prompt.

Mesmo se você expandir o ~caminho para o caminho completo, se não souber qual usuário está executando o comando e estiver alternando regularmente, poderá criar problemas com as permissões de arquivo ou executável.

Doug Harris
fonte
Olá, minha intenção era substituir \ w pelo caminho completo, incluindo o caminho FULL $ HOME. Graças a Ignacio, agora estou usando PS1 = '\ e [4; 35m \ t \ e [24m \ u @ \ h: $ (pwd) \ e [m \ n $' que resolveu meu problema :-)
Jirka
Perfeito - gosto de incluir \upara saber quem sou. Não se esqueça de aceitar a resposta de Ignacio - clique na caixa de seleção à esquerda da pergunta.
Doug Harris
Obrigado pela dica. Eu sou novo neste fórum. É um ótimo lugar.
Jirka
\ L @ \ h: $ DTD (nota do cólon) pode ser utilizado como entrada para o scp
weberjn
0

Estou usando a configuração abaixo no meu arquivo .bash_profile

$ export PS1='\e[1;34m\D{%T %d.%m.%Y} \[\033[00;39m\]\u\[\033[00;32m\]@$IP:\[\033[00;33m\]$(pwd)/\n\\$\[\033[00m\] '

21:40:08 14.12.2017 vmware@10.112.202.228:/home/vmware/Downloads/
Mohammad Shahid Siddiqui
fonte