Ich bin neu im Bashing und möchte, dass meine Aufforderung etwas anzeigt, das in tcsh trivial war, aber nach einer guten Google-Suche kann ich es immer noch nicht.
Ich möchte, dass meine Eingabeaufforderung nur das aktuelle und das übergeordnete Verzeichnis enthält:
/parent/currentdir $
In tcsh wird dies erreicht durch:
set prompt = "%C2 %"
Bisher habe ich jedoch in bash nur festgestellt, dass ich pwd analysieren muss, um die gleiche Ausgabe zu erhalten.
Gibt es nicht einen einfacheren Weg wie:
export PS1="$(some_command) $"
PS1='\w \$'; PROMPT_DIRTRIM=2
sollte man das bash-Äquivalent geben, aber das funktioniert auf meinem System nicht richtig.PROMPT_DIRTRIM
wurde in Bash 4 eingeführt . Ich habe gerade auf Ubuntu 16.04 unter WSL getestet und es hat super funktioniert!Antworten:
Die Funktionen für die schnelle Steuerung von Bash sind eher statisch. Wenn Sie mehr Kontrolle wünschen, können Sie Variablen in Ihre Eingabeaufforderung aufnehmen. Stellen Sie sicher, dass Sie die
promptvars
Option nicht deaktiviert haben .Beachten Sie die einfachen Anführungszeichen: Die Variablenerweiterungen müssen zum Zeitpunkt der Anzeige der Eingabeaufforderung und nicht zum Zeitpunkt der Anzeige der Eingabeaufforderung erfolgen
PS1
Definition Variablen.Wenn Sie mehr Kontrolle darüber haben möchten, was angezeigt wird, können Sie Befehlsersetzungen verwenden. Das obige Snippet verliert beispielsweise die
~
Abkürzung für das Ausgangsverzeichnis.Dieser Code ist recht umständlich, so , anstatt sie in den von kleben
PS1
Variable, können Sie die verwenden können ,PROMPT_COMMAND
variabel zu laufen Code einzustellenHPWD
und dann verwenden , die in Ihrem prompt.Da sich die verkürzte Eingabeaufforderung nur bei einer Verzeichnisänderung geändert hat, müssen Sie sie nicht jedes Mal neu berechnen, wenn eine Eingabeaufforderung angezeigt wird. Bash bietet keinen Hook, der bei einem aktuellen Verzeichniswechsel ausgeführt wird, aber Sie können ihn simulieren, indem Sie ihn
cd
und seine Cousins überschreiben .Beachten Sie, dass Sie nicht exportieren müssen und sollten
PS1
, da es sich um eine Shell-Einstellung und nicht um eine Umgebungsvariable handelt. Eine Bash-PS1
Einstellung würde von anderen Shells nicht verstanden.PS Wenn Sie eine schöne interaktive Shell-Erfahrung wünschen, wechseln Sie zu zsh , wobei alle diese Funktionen (Eingabeaufforderungserweiterungen, die
%
weitgehend tcshs umfassenchpwd
, usw.) native Funktionen sind.quelle
Die Syntax zum Abrufen des übergeordneten und des aktuellen Verzeichnisses ist Munais Antwort entnommen .
Wie Gilles jedoch bemerkt hat, zeigt dieser Code nur das aktuelle Verzeichnis zu diesem Zeitpunkt an
.bashrc
Ladens geladen wird, ändert sich jedoch nicht, wenn Sie im System zu anderen Ordnern navigieren.Wenn Sie dies in Ihrer
.bashrc
Datei haben, wird die Eingabeaufforderung automatisch in Ihr aktuelles Verzeichnis aktualisiert:quelle
prompt_command()
etwas für sich tun? Für mich nicht. Wollten Sie , wie Gilles , auchprompt_command()
in Redefinitionen voncd
& co verwenden? Oder meintest duPROMPT_COMMAND='...'
?$PWD
ein Leerzeichen enthält./
? Wie geschrieben, erhalten Sie/// $
Eingabeaufforderungszeichenfolge kann einfach
bash
durch Bearbeiten der Shell-Variablen geändert werdenPS1
. Es steht für Prompt String 1. Mehr Infos hier .Feuern Sie jetzt Ihre
bash
Muschel an.vi ~/.bashrc
Hänge die PS1-Definition an die Datei an
Weitere Tutorials hier und hier , damit Sie noch mehr daran arbeiten können.
quelle
.bashrc
es geladen wird. Die Eingabeaufforderung ändert sich nicht, wenn Siecd
in ein anderes Verzeichnis wechseln ! @twalbaumMöglicherweise einfacher mit "~" für das Basisverzeichnis.
quelle
quelle
Die Einstellung
PROMPT_DIRTRIM=2
sollte alles sein, was Sie brauchen.quelle