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)?

David B
fonte
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\$ '
cYrus
fonte
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
23

Coloque em sua casa .bashrc

PS1='\u@\h:\w\$ '
Alex
fonte
7
A chave aqui é \wfornece o caminho completo, enquanto \Wfornece apenas o diretório. Veja "Sequências de escape do prompt do Bash"
zamnuts
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

Sirex
fonte
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).

Huygens
fonte
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\$ "
Doug Harris
fonte
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