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


43

Vorrei visualizzare il percorso corrente nel prompt 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 si aggiorna quando la directory viene cambiata o l'utente cambia. Si prega di suggerire un modo per rendere questo dinamico.


1
Si noti che ognuno $()esegue un programma separato; sarebbe più veloce usare variabili d'ambiente, come $LOGNAME, $HOSTNAMEe $PWDinvece.
gravità

Una risposta era usare le virgolette singole invece delle doppie virgolette, tuttavia, questa è la risposta corretta completa. Quello che vuoi veramente fare è rinviare la valutazione del codice all'interno del tuo prompt fino a quando non viene utilizzato.
MaasSql

Tutto ciò che serve è utilizzare l'esportazione "PS1 =" $ (whoami) @ $ (nome host): $ (pwd)> "quindi modificare / etc / profile e aggiungere questa riga alla fine.
SDsolar

Risposte:


76

Le sostituzioni di comandi tra virgolette doppie "vengono espanse immediatamente. Non è quello che vuoi per il tuo prompt. Le virgolette singole 'conserveranno le sostituzioni in $PS1cui poi si espandono solo quando si visualizza il prompt. Quindi questo dovrebbe funzionare:

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

Se vuoi il solito simbolo del dollaro e uno spazio alla fine del tuo prompt, aggiungi semplicemente $alla fine (non è necessario scappare):export PS1='$(whoami)@$(hostname):$(pwd)$ '


1
Ha funzionato come un incantesimo dopo aver cambiato 'set' in 'export' nella tua risposta in cui export PS1='$(whoami)@$(hostname):$(pwd)$'ho salvato le modifiche /etc/profile. Grazie.
Bleamer,

@Bleamer: ha setfunzionato per me (ma non avevo un nativo sh). Ma lo cambierò exportper adeguarmi alla tua configurazione.
mpy,

2
C'è un modo per renderlo permanente? Attualmente devo farlo ogni volta che eseguo l'accesso. Grazie!
the.ufon,

3
Hai inserito questa riga in /etc/profile(vedi domanda) o ~/.profile?!
mpy,

+1, questo alla fine avrebbe bisogno di un delimitatore. Così com'è, ottieni qualcosa come foo@localhost:/home/fools -laquando lo usi ls -la.
galleria

12
sh-4.2$ export PS1="\u@\h:\w>"
jenny@serenity:~>cd /usr/local
jenny@serenity:/usr/local>

1
Temo che funzioni per bash shell e non per sh, quando lo faccio ottengo \u@\h:\w>come prompt dei comandi
Bleamer

1
Deve essere una versione sh diversa; come puoi vedere dalla prima riga, ha funzionato per me in sh 4.2.
Jenny D,

1
Questo potrebbe essere il caso. Questa shell proviene da Busy Box. Grazie. Apprezzo il tuo aiuto però.
Bleamer,

@Bleamer, funziona con me BusyBox v1.19.4 built-in shell (ash).
cjm,

Grazie per la risposta @cjm, anche se eviterò di approfondire ulteriormente questo aspetto.
Bleamer,

5

Questo comando funziona per me.

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

Dove
\ u = nome utente
\ h = nome host
\ W Nome della cartella attuale (non percorso completo)


+1 per il parametro \ W
Dimitry K

3

Si potrebbe considerare di magnacciare il 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
Questo è quello che stavo cercando. Spero che a tutti piacciano alcuni colori nella vita :)
Govind Kailas,

Almeno lo faccio. ;)
Arvid,

1

Una risposta era usare le virgolette singole anziché le doppie virgolette, tuttavia, questa non è la risposta completamente corretta. Quello che vuoi veramente fare è rinviare la valutazione del codice all'interno del tuo prompt fino a quando non viene utilizzato.

set PS1="$(pwd)" 

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

set PS1="\$(pwd)" 

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

Prova / Comprendi eseguendo:

echo $PS1

. Se vedi la stringa: $ pwd, il tuo prompt funziona. Se vedi il percorso letterale, il prompt viene interrotto perché è stato impostato staticamente


1

Utilizzare il comando seguente per impostare è come nel pannello.

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


Grazie! Nessuna delle altre opzioni sopra ha funzionato. Questo ha fatto. Mi stava facendo impazzire. Grazie per avermi salvato la sanità mentale. HA!
Lee_Str,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.