Change Directory

Fr, 28. Mai 2021, Ralf Hersel

Eines der am häufigsten verwendeten Befehle auf der Kommandozeile ist 'cd'. Jede Anwenderin kennt diesen Befehl und weiss, wie damit umzugehen ist. Wer im Terminal tippt, verwendet 'cd' hunderte Male am Tag. Wieso soll man darüber einen Artikel schreiben? Vielleicht deshalb, weil das 'muscle-brain' sich einige Varianten angewöhnt hat, für die es einfachere Alternativen gibt.

Übrigens ist 'cd' gar kein Kommandozeilen-Befehl, sondern ein Shell-Utility. Ruft doch einmal spasseshalber die Man-page von 'cd' auf:

man cd
Kein Handbucheintrag für cd vorhanden

Warum? Darum:

cd ist kein Befehl, sondern in die Shell eingebaut. Dies ist notwendig, weil das aktuelle Arbeitsverzeichnis durch die Umgebungsvariable PWD gesteuert wird, die nach dem Befehl pwd oder "print working directory" benannt ist. Die Umgebungsvariablen eines Elternprozesses können von einem Kindprozess nicht verändert werden. Wenn die Shell also /bin/cd ausführt, das PWD ändert, würde sich das nur auf /bin/cd und alles, was es ausführt, auswirken. Es würde nicht das PWD der Shell ändern.

'cd' lässt sich auch nicht aus einem Shell-Skript aufrufen, weil das Skript in einer Sub-Shell ausgeführt wird, die keine Auswirkung auf den Elternprozess hat, aus dem das Skript aufgerufen wurde. Das funktioniert nur dann, wenn man das Skript in dem 'cd' verwendet wird, mittels 'Sourcing' aufruft. Nur dann hat das Kommando Auswirkung auf die aufrufende Shell; der Punkt macht hier den Unterschied:

. myscript.sh

Genug des Vorgeplänkels - kommen wir zur Verwendung des 'cd' Befehls. Ich vergleiche das Verhalten in der Bash mit der Z-Shell.

Zweck Bash (Ubuntu) Z-Shell (Manjaro)
Go home cd cd
Zum Verzeichnis auf dieser Ebene cd verzeichnis_name verzeichnis_name
Zu einem beliebigen Verzeichnis cd /alpha/beta/gamma alpha/beta/gamma
Dasselbe mit z.sh z gamma z gamma
Gehe zu Verz. mit Auto-Completion cd a TAB b TAB g TAB cd a/b/g TAB
Gehe ein Verzeichnis höher cd .. ..
Gehe in das zuvor genutzte Verzeichnis cd - cd -

Leider unterstützen weder Bash noch Z-Shell das direkte Anspringen von beliebigen Verzeichnissen, ohne den vollständigen Pfad zu verwenden. Dazu sind Zusatz-Tools notwendig, wie z. B.: autojump, fzf oder z.

Es wurden noch keine Kommentare verfasst, sei der erste!