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.


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)$ '


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>

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)


+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\]\$ '

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


1

Use o comando abaixo para definir como no cpanel.

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


Obrigado! Nenhuma das outras opções acima funcionou. Este fez. Estava me deixando louco. Obrigado por salvar minha sanidade. HA!
Lee_Str
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.