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