Ihr System (wie viele Unix-Systeme) hat keinen externen cd
Befehl (zumindest nicht in diesem Pfad). Selbst wenn es eine hätte, die ls
würde Ihnen die Verzeichnisliste des ursprünglichen Verzeichnisses geben. Ein externer Befehl kann niemals das Verzeichnis für den aufrufenden Prozess (Ihre Shell) ändern.
Entfernen Sie den Alias mit unalias cd
aus der Umgebung (und entfernen Sie auch seine Definition aus allen Shell-Initialisierungsdateien, denen Sie es möglicherweise hinzugefügt haben).
Mit einer Shell-Funktion können Sie es als cd
zum Laufen bringen normalerweise mit einem zusätzlichen Aufruf von ls
am Ende, wenn die cd
erfolgreich:
cd () {
command cd "[email protected]" && ls -lah
}
oder,
cd () { command cd "[email protected]" && ls -lah; }
Dies würde den cd
aufrufen Befehl, der in Ihre Shell integriert ist, mit denselben Befehlszeilenargumenten, die Sie der Funktion gegeben haben. War der Verzeichniswechsel erfolgreich, wird die ls
würde Rennen.
Die command
Befehl verhindert, dass die Shell die Funktion rekursiv ausführt.
Die Funktionsdefinition (wie oben geschrieben) würde in die Startdatei Ihrer Shell aufgenommen. Mit bash
, das könnte ~/.bashrc
sein . Die Funktionsdefinition wäre dann in der nächsten neuen interaktiven Shell-Sitzung aktiv . Wenn es jetzt aktiv sein soll , führen Sie dann die Funktionsdefinition unverändert am interaktiven Shell-Prompt aus, wodurch sie in Ihrer aktuellen interaktiven Sitzung definiert wird.
Auf Systemen, auf denen cd
als externer Befehl verfügbar ist, ändert dieser Befehl auch nicht das Verzeichnis für den aufrufenden Prozess. Die einzige wirkliche Verwendung für einen solchen Befehl besteht darin, POSIX-Kompatibilität bereitzustellen und als Test zu dienen, ob ein Verzeichniswechsel in ein bestimmtes möglich wäre .
Ich konnte es lösen, indem ich den Alias wieder mit unalias cd
entfernte
Das geschah aus folgenden Gründen:
$ type cd
cd is a shell builtin