2013-05-29 09:56:16 +0000 2013-05-29 09:56:16 +0000
43
43

Como mostrar o caminho actual na prompt de comando no prompt sh do linux (não bash)?

Gostaria de mostrar o caminho actual na prompt sh (não bash shell), que actualmente mostra apenas “#”, tentei introduzir este

env PS1="$(whoami)@$(hostname):$(pwd)"

e

set PS1="$(whoami)@$(hostname):$(pwd)"

em /etc/profile.

Mas como é óbvio isto não actualiza quando o directório é alterado ou o utilizador muda. Por favor, sugira uma forma de tornar esta dinâmica.

Respostas (6)

77
77
77
2013-05-29 10:05:04 +0000

As substituições de comando entre aspas duplas " são imediatamente expandidas. Isso não é o que você quer para a sua rapidez. As aspas simples ' irão preservar as substituições em $PS1 que depois só serão expandidas quando mostrar o prompt. Portanto isto deve funcionar:

export PS1='$(whoami)@$(hostname):$(pwd)'

Se quiser o habitual sinal de dólar e um espaço no final da sua mensagem, simplesmente adicione $ no final (não é necessário fugir): export PS1='$(whoami)@$(hostname):$(pwd)$ '

14
14
14
2013-05-29 10:07:44 +0000
sh-4.2$ export PS1="\u@\h:\w>"
jenny@serenity:~>cd /usr/local
jenny@serenity:/usr/local>
5
5
5
2017-06-25 05:27:44 +0000

Este comando funciona para mim.

export PS1="\u@\h: \W:$"

Onde \u = username \h = hostname \W Nome da pasta actual (não caminho completo)

3
3
3
2018-11-23 13:35:39 +0000

Poder-se-ia considerar a possibilidade de chulo a pronto, acrescentando algumas cores. Por exemplo:

export PS1='\[\e[0;36m\]\u\[\e[0m\]@\[\e[0;33m\]\h\[\e[0m\]:\[\e[0;35m\]\w\[\e[0m\]\$ '
1
1
1
2015-10-21 12:29:41 +0000

Use o comando abaixo para definir é como no cpanel.

export PS1=‘$(whoami)@${HOSTNAME%%.*} [$(pwd)]#

1
1
1
2014-10-27 14:49:59 +0000

Uma resposta foi utilizar citações simples em vez de citações duplas, no entanto, essa não é bem a resposta totalmente correcta. O que realmente quer fazer é adiar a avaliação do código dentro do seu prompt até que o prompt seja utilizado.

set PS1="$(pwd)"

define o prompt para o directório de trabalho a partir do comando set.

set PS1="\$(pwd)"

NÃO expande $(pwd). Em vez disso, PS1 é definido para o valor literal de $(pwd).

Teste / Entenda isto executando:

echo $PS1

. Se você vir a string : $pwd, o seu prompt funciona. Se vir o caminho literal, o prompt é quebrado porque foi estaticamente definido