Como exibir o caminho atual no prompt de comando no sh do linux (não no bash)?

43

Gostaria de exibir o caminho atual no prompt sh (não no bash shell), que atualmente mostra apenas "#", tentei introduzir este

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

e

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

no /etc/profile.

Mas, como óbvio, isso não é atualizado quando o diretório é alterado ou o usuário é alterado. Por favor, sugira uma maneira de tornar isso dinâmico.

Bleamer
fonte
11
Observe que cada $()um executa um programa separado; seria mais rápido usar variáveis ​​de ambiente, como $LOGNAME, $HOSTNAMEe em $PWDvez disso.
grawity
Uma resposta era usar aspas simples em vez de aspas duplas, no entanto, essa é a resposta correta e completa. O que você realmente deseja fazer é adiar a avaliação do código dentro do seu prompt até que o prompt seja usado.
MaasSql
Tudo o que você precisa é usar a exportação "PS1 =" $ (whoami) @ $ (nome do host): $ (pwd)> ", depois edite o / etc / profile e anexe esta linha no final.
SDsolar

Respostas:

76

As substituições de comando entre aspas duplas "são expandidas imediatamente. Não é isso que você deseja para o seu prompt. Aspas simples 'preservarão as substituições nas $PS1quais serão expandidas apenas ao exibir o prompt. Portanto, isso deve funcionar:

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

Se você deseja o cifrão usual e um espaço no final do seu prompt, basta adicionar $no final (não é necessário escapar):export PS1='$(whoami)@$(hostname):$(pwd)$ '

mpy
fonte
11
Funcionou como um encanto depois de alterar 'set' para 'export' na sua resposta que export PS1='$(whoami)@$(hostname):$(pwd)$'eu salvei as alterações em /etc/profile. Obrigado.
Bleamer
@ Bleamer: settrabalhou para mim (mas eu não tinha um nativo sh). Mas vou alterá-lo exportpara estar de acordo com sua configuração.
Mpy
2
Existe alguma maneira de tornar isso permanente? Atualmente, tenho que fazer isso toda vez que faço login. Obrigado!
the.ufon
3
Você colocou esta linha em /etc/profile(veja a pergunta) ou ~/.profile?!
Mpy
+1, no entanto, seria necessário algum delimitador no final. Como é, você obtém algo como foo@localhost:/home/fools -laao usar ls -la.
Phresnel
12
sh-4.2$ export PS1="\u@\h:\w>"
jenny@serenity:~>cd /usr/local
jenny@serenity:/usr/local>
Jenny D
fonte
11
Temo que as obras para a festança não desembolsar para sh, quando eu fizer isso eu recebo \u@\h:\w>como meu prompt de comando
Bleamer
11
Deve ser uma versão sh diferente; Como você pode ver na primeira linha, funcionou para mim no item 4.2.
Jenny D
11
Talvez seja o caso. Esse shell é da Busy Box. Obrigado. Agradecemos sua ajuda.
Bleamer
@ Bleamer, funciona para mim BusyBox v1.19.4 built-in shell (ash).
Cjm 11/09/2013
Obrigado pela resposta @cjm, mas evitarei aprofundar isso.
Bleamer
5

Este comando funciona para mim.

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

Onde
\ u = nome do usuário
\ h = nome do host
\ W Nome da pasta atual (caminho não completo)

rangsiman
fonte
+1 para o parâmetro \ W
Dimitry K
3

Pode-se considerar o proxeneta adicionando algumas cores. Por exemplo:

export PS1='\[\e[0;36m\]\u\[\e[0m\]@\[\e[0;33m\]\h\[\e[0m\]:\[\e[0;35m\]\w\[\e[0m\]\$ '
Arvid
fonte
11
Era isso que eu estava procurando. Espero que todos gostem de algumas cores na vida :)
Govind Kailas 19/09
Pelo menos eu. ;)
Arvid
1

Uma resposta foi usar aspas simples em vez de aspas duplas, no entanto, essa não é a resposta correta completa. O que você realmente deseja fazer é adiar a avaliação do código dentro do seu prompt até que o prompt seja usado.

set PS1="$(pwd)" 

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

set PS1="\$(pwd)" 

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

Teste / entenda isso executando:

echo $PS1

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

MaasSql
fonte
1

Use o comando abaixo para definir como no cpanel.

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

Milão
fonte
Obrigado! Nenhuma das outras opções acima funcionou. Este fez. Estava me deixando louco. Obrigado por salvar minha sanidade. HA!
Lee_Str