Sie können dies mit einer Funktion tun:
$ cdls() { cd "$@" && ls; }
Das &&
bedeutet ' cd
in ein Verzeichnis und wenn erfolgreich (zB das Verzeichnis existiert), ausführen ls
'. Die Verwendung des &&
Operators ist besser als die Verwendung eines Semikolon- ;
Operators zwischen den beiden Befehlen, wie bei { cd "$@" ; ls; }
. Dieser zweite Befehl wird ausgeführt, ls
unabhängig davon, ob er cd
funktioniert hat oder nicht. Wenn dies cd
fehlschlägt, ls
wird der Inhalt Ihres aktuellen Verzeichnisses gedruckt, was für den Benutzer verwirrend ist. Als Best Practice verwenden &&
und nicht ;
.
$ cdls /var/log
CDIS.custom fsck_hfs.log monthly.out system.log
$ pwd
/var/log
Im Allgemeinen ist es eine schlechte Praxis, einen bereits vorhandenen Befehl umzubenennen, insbesondere für einen allgemein aufgerufenen Befehl wie cd
. Erstellen Sie stattdessen einen neuen Befehl mit einem anderen Namen. Wenn Sie cd
mit einer Funktion oder einem Alias überschreiben, der auch benannt ist cd
, was würde passieren, wenn Sie ein Verzeichnis mit 100.000 Dateien eingeben? Es gibt viele Dienstprogramme, die verwendet werden cd
, und sie können durch dieses ungewöhnliche Verhalten verwirrt werden. Wenn Sie ein freigegebenes Konto verwenden (z. B. root
wenn Sie mit anderen Systemadministratoren arbeiten), kann es sehr gefährlich sein, einen vorhandenen Befehl zu ersetzen, da sich die Umgebung von den Erwartungen der Benutzer unterscheidet.
pwd
. Ich bin nicht sicher, ob dies eine bewährte Methode ist, aber sie wird häufig angewendet. Einige Beispiele finden Sie unter tldp.org/LDP/abs/html/aliases.html .cd() { builtin cd "$@" && pwd; };
- Mit Standard-Borowski-Shell auf MacOS (Sierra 10.12.6)Ich habe dies in meinem .bashrc, und es funktioniert gut.
Früher in meinem .bashrc habe ich:
[ -z "$PS1" ] && return
und alles nach dieser Zeile gilt nur für interaktive Sitzungen, daher hat dies keine Auswirkungen auf das Verhaltencd
in Skripten.quelle
[ -z "$PS1" ] && return
das?[ -z "$PS1" ]
prüft, ob die$PS
(interaktive Eingabeaufforderungsvariable) "Nulllänge" (-z) ist. Wenn die Länge Null ist, bedeutet dies, dass sie nicht festgelegt wurde, sodass Bash nicht im interaktiven Modus ausgeführt werden darf. Unter diesen Bedingungen wird das&& return
Teil.bashrc
an dieser Stelle aus der Beschaffung genommen .i
in"$-"
:case "$-" in *i*) ;; *) return ;; esac
.PS1
Variable ist möglicherweise nicht gesetzt oder leer, und die Shell ist möglicherweise noch interaktiv (jedoch ohne Eingabeaufforderung). Ich würde das überprüfen$-
, um sicherzugehen.Off-Topic, da die Frage mit / bash markiert ist, aber da einige Fragen als Duplikat dieser Frage geschlossen sind, die bash nicht erwähnen:
Mit zsh:
Die Funktion chpwd () wird von zsh aufgerufen, wenn sich das aktuelle Verzeichnis ändert (über cd, pushd, popd ...). tcsh hat eine ähnliche Funktion und ist wahrscheinlich der Ort, von dem zsh sie erhalten hat.
quelle
Warum nicht einen Alias zu Ihrer .bashrc-Datei hinzufügen?
So etwas wie:
quelle
Die übliche Lösung zum Erstellen eines Alias für den Befehl cd ist nicht perfekt, da es andere Befehle gibt, die Ihr aktuelles Verzeichnis ändern können, z. B. popd, oder sogar ein Skript mit dem Befehl cd ausführen.
Es ist besser, den $ PROMPT_COMMAND-Bash-Hook zu verwenden, der einen Befehl ausführt, bevor eine Eingabeaufforderung zurückgegeben wird.
Der Befehl (in unserem Fall eine Funktion) wird nur dann ausgeführt, wenn das Verzeichnis geändert wurde, um das Bildschirmrauschen zu verringern. Code für .bashrc:
quelle
Kopier das:
Jetzt können Sie einfach eine CD machen:
quelle
In Bash können Sie keine Aliase für Aktionen wiederholen, für die Parameter erforderlich sind. Dafür gibt es Funktionen. Geben Sie also
~/.bashrc
Folgendes einquelle
cd "$1" && ls
wäre besser.function mycd { builtin cd "$1" && ls "$2" }
.Fügen Sie den folgenden Code in das .profile ein und es funktioniert. Getestet auf HP-Unix-Box.
quelle
Noch praktischer - mit der Fähigkeit, in die Geschichte zurückzugehen :
Wenn Sie das Verzeichnis wechseln, wird eine Zeile mit:
Stack: (current_dir) (previous_dir) ...
angezeigt und dannls
ausgegeben. In dirs nur diesen Befehl Pop - Geschichte zurück zu gehen:popd
.Ich habe hinzugefügt,
else
damit beim Versuch, in ein falsches Verzeichnis zu wechseln, ein Fehler angezeigt wird.quelle
Ich denke, es ist gut, die
ls
Optionen auf diese Weise zu aktivieren , dacd
keine Option erforderlich ist.quelle
cd
nimmt Optionen.Folgendes finde ich nützlich (unter Debian 9):
Dies gibt mir eine gekürzte Ausgabe mit Auslassungspunkten, falls sich zu viele Elemente in diesem Verzeichnis befinden, damit die Konsole sauber bleibt:
quelle
quelle