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

Come visualizzare il percorso corrente nel prompt dei comandi di linux in sh (non bash)?

Vorrei visualizzare il percorso corrente nel prompt di sh (non bash shell), che attualmente mostra solo “#”, ho provato con l'introduzione di questo

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

e

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

in /etc/profile.

Ma come ovvio questo non aggiorna quando la directory viene cambiata o l'utente cambia. Si prega di suggerire un modo per rendere questa dinamica.

Risposte (6)

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

Le sostituzioni dei comandi tra virgolette " vengono immediatamente ampliate. Non è quello che vuoi per il tuo prompt. Le singole virgolette ' manterranno le sostituzioni in $PS1 che verranno espanse solo quando verrà visualizzato il prompt. Quindi questo dovrebbe funzionare:

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


Se volete il solito segno del dollaro e uno spazio alla fine del vostro prompt, aggiungete semplicemente `$` alla fine (non è necessaria la fuga): `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

Questo comando funziona per me.

export PS1="\u@\h: \W:$"
``` &001 


Dove 
_\u = nome utente_ 
_\h = nome host_ 
_\W Nome della cartella attuale (non percorso completo)_
3
3
3
2018-11-23 13:35:39 +0000

Si potrebbe prendere in considerazione l'idea di fare da pappone al prompt aggiungendo alcuni colori. Per esempio:

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

Usare il seguente comando per impostare è come nel cpanel.

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

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

Una risposta è stata quella di usare le virgolette singole invece delle doppie virgolette, ma non è proprio la risposta corretta. Quello che si vuole veramente fare è rimandare la valutazione del codice all'interno del prompt fino a quando non viene utilizzato il prompt.

set PS1="$(pwd)"

imposta il prompt nella directory di lavoro a partire dal comando set.

set PS1="\$(pwd)"
``` ```
echo $PS1

NON espande $(pwd). Invece, PS1 è impostato al valore letterale di $(pwd).

Test / Capire questo eseguendo:

&001 &001

. Se vedete la stringa : $pwd, il vostro prompt funziona. Se vedete il percorso letterale, il prompt è rotto perché è stato impostato staticamente