Antworten:
Aus Bash Tips and Tricks: 'CD' mit Stil :
Abschließend möchte ich Ihnen zeigen, wie Sie Ihren eigenen benutzerdefinierten Ersatz für den Befehl 'cd' schreiben.
Stellen Sie fest, dass Sie beim Wechseln in ein Verzeichnis immer dasselbe eingeben? Wahrscheinlich listen Sie die Dateien dort jedes Mal auf, vielleicht so oft, dass Ihre Hände automatisch nach jeder 'CD' 'ls' eingeben.
Nun, wenn ich alles versuche, was mir einfällt, zeigt sich, dass es nur einen Weg gibt, das angestrebte Ziel richtig zu erreichen. Wir müssen eine Shell-Funktion erstellen.
Shell-Funktionen sind Teil der Shell-Programmierung. Funktionen bieten wie in kompilierten Programmiersprachen eine Art prozedurale Modularisierbarkeit. Man kann eine generische Funktion erstellen, um ein häufig verwendetes Stück Logik oder Berechnung mit verschiedenen Parametern durchzuführen. In diesem Fall ist der Parameter das aktuelle Arbeitsverzeichnis.
Hier ist eine einfache:
function cs () { cd $1 ls }
Wie @geirha genau feststellt, schlägt die obige Funktion fehl, wenn Sie versuchen, zu einem Verzeichnis mit einem Leerzeichen im Namen zu wechseln:
$ cs A\ B/
-bash: cd: A: No such file or directory
<current directory listing>
Sie sollten stattdessen die folgende Funktion verwenden:
function cs () {
cd "$@" && ls
}
Sobald Sie diesen Code hinzugefügt haben, ~/.bashrc
sollten Sie in der Lage sein, dies zu tun:
hello@world:~$ cs Documents/
example.pdf tunafish.odt
hello@world:~/Documents$
Sie können den builtin
Befehl in bash verwenden:
function cd() {
new_directory="$*";
if [ $# -eq 0 ]; then
new_directory=${HOME};
fi;
builtin cd "${new_directory}" && ls
}
function ls() { /usr/bin/ls $* }
cd
weil rvm
sich auch meine cd
Definition geändert hat . Siehe stackoverflow.com/a/19941991/1601989
Verwenden Sie eine Funktion anstelle eines Alias:
cs() { cd "$1" && ls; }
Danke Florian Diesch für den Tipp, eine Funktion zu benutzen. Ich kann cs
den Namen nicht verwenden, da das csound- Paket einen cs
Befehl enthält , den ich verwendet habe lc
.
Ich habe dies zu ~/.bash_aliases
( nano ~/.bash_aliases
) hinzugefügt :
function lc () {
cd $1;
ls
}
Das Terminal muss dafür eingerichtet sein reset
.
$1
nicht tun, schlägt es fehl, wenn das Verzeichnis Leerzeichen enthält. Außerdem sollten Sie den Rückgabewert von prüfen cd
. Wenn es fehlgeschlagen ist (z. B. die Erlaubnis verweigert wurde), macht es keinen Sinn, das auszuführen ls
. lc() { cd "$@" && ls; }
Als Erweiterung dieser Funktion: cs() { cd "$1" && ls; }
, können Sie auf alle die Argumente der Funktion zu übergeben cd
durch die Verwendung $@
von anstelle "$1"
als solche: cs() { cd $@ && ls; }
.
Ich hatte Probleme bei der Neudefinition, cd
weil rvm
sich auch meine cd
Definition geändert hat . Siehe https://stackoverflow.com/a/19941991/1601989 . Ich wollte nicht wirklich verwenden, builtin
weil das alles überspringen würde, was gerade gemacht rvm
wird.
Ich habe Folgendes zu meinem hinzugefügt .bashrc
:
# cdd allows you to cd to the directory of the given file or directory
function cdd()
{
if [[ $# -eq 0 ]]; then
cd
elif [[ -d "$*" ]]; then
cd "$*"
elif [[ -f "$*" ]]; then
echo "WARNING: file given, cd to file's dirname" 1>&2
local dir=$(dirname "$*")
cd "$dir"
else
cd "$*"
fi
}
function cs()
{
cdd $* && ls
}
Und dann nach der rmv
Zeile in der .bashrc
:
alias cd='cdd'
# Use bash built in completion for cd to allow for filenames to be used
complete -r cd