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

Wie kann man den aktuellen Pfad in der Eingabeaufforderung in der sh (nicht in der bash) von Linux anzeigen?

Ich möchte den aktuellen Pfad in der Eingabeaufforderung der sh (nicht in der bash-Shell) anzeigen, die derzeit nur “#” anzeigt, ich habe versucht, dies einzuführen

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

und

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

in /etc/profile.

Aber wie offensichtlich wird dies nicht aktualisiert, wenn das Verzeichnis geändert wird oder der Benutzer wechselt. Bitte schlagen Sie eine Möglichkeit vor, dies dynamisch zu machen.

Antworten (6)

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

Befehlsersetzungen in doppelten Anführungszeichen " werden sofort erweitert. Das ist nicht das, was Sie sich für Ihre Eingabeaufforderung wünschen. Einfache Anführungszeichen ' behält die Ersetzungen in $PS1 bei, die dann erst bei der Anzeige der Eingabeaufforderung erweitert werden. Daher sollte dies funktionieren:

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

Wenn Sie das übliche Dollarzeichen und ein Leerzeichen am Ende Ihrer Eingabeaufforderung wünschen, fügen Sie einfach $ am Ende hinzu (kein Escaping notwendig): 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

Dieser Befehl funktioniert bei mir.

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

Wo \u = Benutzername \h = Hostname \W Name des aktuellen Ordners (nicht vollständiger Pfad)

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

Man könnte sich überlegen, die Eingabeaufforderung durch das Hinzufügen einiger Farben aufzupeppen. Zum Beispiel:

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

Verwenden Sie den unten stehenden Befehl, um die Einstellung wie im cpanel vorzunehmen.

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

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

Eine Antwort bestand darin, einfache Anführungszeichen anstelle von doppelten Anführungszeichen zu verwenden, aber das ist nicht ganz die vollständige richtige Antwort. Was Sie wirklich tun wollen, ist die Auswertung des Codes in Ihrer Eingabeaufforderung aufzuschieben, bis die Eingabeaufforderung verwendet wird.

set PS1="$(pwd)"

setzt die Eingabeaufforderung ab dem Befehl set auf das Arbeitsverzeichnis.

set PS1="\$(pwd)"

expandiert NICHT $(pwd). Stattdessen wird PS1 auf den wörtlichen Wert von $(pwd) gesetzt.

Test / Verstehen Sie dies, indem Sie ausführen:

echo $PS1

. Wenn Sie die Zeichenfolge : $pwd sehen, funktioniert Ihre Eingabeaufforderung. Wenn Sie den wörtlichen Pfad sehen, ist die Eingabeaufforderung unterbrochen, weil sie statisch gesetzt wurde