Como posso exibir o caminho absoluto no prompt do bash?


50

Atualmente, tenho o meu bash PS1definido para algo como isto:

PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\w\n\$ "

Como posso mostrar o caminho absoluto em vez do caminho relativo (por exemplo, em /home/dave/dirvez de ~/dir)?


1
/home/dave/dire ~/dirsão caminhos absolutos, o segundo usa uma abreviação para o diretório inicial. Um caminho relativo é um caminho que é relativo ao seu diretório atual (por exemplo ../dir) em vez de iniciar na raiz ( /).
Doug Harris

3
ps Bom uso da cor para indicar o status de saída do comando anterior. Provavelmente o primeiro uso de cores em um prompt que eu gostei.
Doug Harris

@ Doug Harris: Obrigado pela correção. Eu também gosto dessa coloração. Não me lembro onde eu vi pela primeira vez (talvez em algum post anterior SU?)
David B

\u@\H[\w]:~\$makesuser@host[~/path]:~$
JREAM 03/01

Respostas:


49

Basta substituir \wpor \$PWD:

PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\$PWD\n\$ "

De qualquer forma, se você se importar com uma pequena dica, eu escreveria algo como:

PS1='\[`[ $? = 0 ] && X=2 || X=1; tput setaf $X`\]\h\[`tput sgr0`\]:$PWD\n\$ '

4
Também pensei nisso, mas o $PWDé avaliado no momento da tarefa PS1, e não em cada chamada. No entanto , se você escapar do cifrão, ele funcionará - \$PWD. Com isso, o cifrão é um cifrão no momento da atribuição e a avaliação da variável ocorre em cada prompt. +1 para você.
Doug Harris

Certo, perdi isso \, normalmente trabalho com aspas simples, se possível. Obrigado.
CYrus

+1 Obrigado! você poderia, por favor, explicar a mágica em sua bela linha do bash (a 'dica')?
David B

Certo. Usei tput (consulte man tput para obter mais informações) para alterar as cores, em vez de escrever os caracteres de controle diretamente, para facilitar a leitura e a portabilidade (?). Também removi aspas duplas e barras invertidas usando aspas simples. Finalmente, usando uma variável, evitei redundância.
CYrus 22/10/10


0

no ps1 do bash; -W deve ser relativo e -w absoluto; portanto, acima você já deve ter o absoluto ?!

http://wiki.archlinux.org/index.php/Color_Bash_Prompt


3
Eu acho que você está confundindo absoluto | relativo com full | current_dir. Wmostra apenas o nome do diretório atual, wmostra o caminho completo, mas ainda usa caminhos relativos.
David B

foi a terminologia no URL, não o meu :)
Sirex

0

Humm ~ / dir é um caminho absoluto, mas usando um "atalho". Por exemplo, se você cd /usr/localsolicitar, provavelmente exibirá o caminho completo de / usr / local. Enfim, você já tem um caminho completo :-)

Mas provavelmente sua pergunta correta é como exibir o caminho completo sem nenhum atalho como ~?

No entanto, eu não sei uma resposta para essa e, olhando para o homem, parece ter uma (pelo menos documentada).


0

Execute em pwdvez de usar \W.

Versão simples:

export PS1="\`pwd\` $ "

Usando isso no seu código:

export PS1="\[\`if [[ \$? = "0" ]]; then echo '\e[32m\h\e[0m'; else echo '\e[31m\h\e[0m' ; fi\`:\`pwd\`\n\$ "

1
ponto secundário: de acordo com o guia de estilo do bash do Google, prefira $ (pwd) a backticks, porque os backticks precisam escapar ao aninhar e $ () não.
funroll
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.