CD zum vorherigen Verzeichnis ohne Echo des Verzeichnisnamens

9

Diese Antwort gab mir cd -die Abkürzung, in mein vorheriges Verzeichnis in Bash zu wechseln. Es gibt ein großes Problem: Es druckt das Verzeichnis, in das es wechselt, und verschwendet meinen Bildschirmplatz, da dieses Verzeichnis dann in der Eingabeaufforderung in der nächsten Zeile wiederholt wird.

Ich weiß, dass ich es kann cd $OLDPWD, auch in dieser Antwort erwähnt, und cd - >/dev/nulldas ist viel mehr Tippen.

Auf der bashManpage steht:

... oder wenn - das erste Argument ist und der Verzeichniswechsel erfolgreich ist, wird der absolute Pfadname des neuen Arbeitsverzeichnisses in die Standardausgabe geschrieben.

Wie kann ich -nicht das erste Argument sein? Mit einem der cdoptionalen Argumente? Gibt es eine andere Möglichkeit, das Echo zu unterdrücken oder die Eingabe zu minimieren, ohne dass auf jeder Maschine, mit der ich arbeite, Funktionen / Aliase definiert werden müssen?

Ishran
quelle
Ziemlich die gleiche Frage hier ...
don_crissti

Antworten:

12

cdberücksichtigt nur das erste Argument und ignoriert alle anderen. Keine der Optionen beeinflusst das Echo des vorherigen Pfadnamens (möglicherweise hat der dokumentierte -@diesen Effekt, aber das ist eine ungültige Option auf meinem System).

Wenn Sie keinen Alias ​​/ keine Funktion verwenden möchten, mit der Sie möglicherweise noch weniger Zeichen eingeben als cd -umleiten oder umleiten können /dev/null, empfehle ich, die spezielle Tilde-Erweiterung in bash:

cd ~-

Von der bashManpage:

Wenn das Tilde-Präfix ein "~ -" ist, wird der Wert der Shell-Variablen OLDPWD, falls festgelegt, ersetzt.

Dies scheint in noch einem anderen Bereich zu sein , bashwo einige besondere Bedeutung geschaffen. Die Tilde-Erweiterung funktioniert normalerweise auf dem $ DIRSTACK, der von, manipuliert / untersucht pushdwurde popd, und dirskann auch in anderen Befehlen verwendet werden ( cp ~-/somefile .). Wenn Sie sie verwendet haben, können pushdSie sie verwenden ~N(wobei N eine Anzahl von zurückgeschobenen Ebenen ist), um zu gelangen diese Verzeichnisse (für cdoder andere Befehle).


Übrigens, wenn Sie Konten auf mehreren Computern haben und davon ausgehen, dass Sie sich mit ssh von einem Ort aus bei ihnen anmelden, sollten Sie Folgendes hinzufügen ~/.bashrc:

if [ -f ~/.bash_common ]; then
    . ~/.bash_common
fi

und dann haben Sie ein Skript auf Ihrem Arbeitscomputer, mit scpdem Sie bash_commonauf jeden dieser Computer "pushen" können. Auf diese Weise können Sie gemeinsame Funktionen auf mehreren Computern mit minimalem Overhead hinzufügen und gemeinsam nutzen.

Anthon
quelle