Aliasse sind nicht dazu gedacht, aber Sie können eine Funktion namens cd
erstellen das ist ein Wrapper für die echte cd
. Dieser funktioniert für mich! Legen Sie es einfach in Ihren .bash_profile
ein oder Ihre Profildatei Ihrer Wahl.
cd () { if [ "$1" = ",," ]; then builtin cd ..; else builtin cd "[email protected]"; fi; }
Oder mit Kommentaren und hübscher Formatierung:
cd ()
{
if [ "$1" = ",," ]; then # if first argument is ",,"...
builtin cd .. # call the builtin cd with ".." instead...
else
builtin cd "[email protected]" # else call builtin cd with original arguments
fi
}
BEARBEITEN
Danke @derobert für den Hinweis auf if then else
ist hier besser als && ||
. Außerdem ist mir gerade aufgefallen (*facepalm *), dass diese Implementierung nur funktioniert, wenn irgendwelche Nicht-Pfad-Argumente (d. h. -L -P
) sind nicht das erste Argument. Seien Sie also gewarnt, wenn Sie die schlechte Angewohnheit haben, cd -L ,,
einzugeben das wird dir nicht helfen. Und das ist nicht trivial, um richtig damit umzugehen, denke ich.
ZSH:
Wenn Sie zsh
verwenden alias -g ,,=".."
ist das, was Sie brauchen, aber dies führt dazu, dass ",", überall erweitert wird, nicht nur, wenn es mit cd
verwendet wird .
Ab man zshbuiltins
:
Wenn die -g
Flag vorhanden ist, definieren Sie einen globalen Alias; globale Aliase werden expandiert, auch wenn sie nicht an der Kommandoposition vorkommen.
BASH:
Wenn auf bash
beschränkt (da die Frage mit bash gekennzeichnet ist), lesen Sie Folgendes:
Dies ist jedoch, wie gewünscht, eine reine Alias-Lösung Dies wird mehr als nötig tun und den Benutzer möglicherweise frustrieren (siehe die Warnung am Ende meines Beitrags).
Zitieren von man bash
:
Wenn das letzte Zeichen des Alias-Werts ein Leerzeichen ist, wird das nächste Befehlswort nach dem Alias ebenfalls auf Alias-Erweiterung geprüft.
Daher reicht es aus, cd
zu aliasieren mit einem zusätzlichen Leerzeichen (um das Erweitern des nächsten Arguments zu ermöglichen) und dann mit dem Alias ,,
bis ..
. Siehe das
alias cd='cd '
alias ,,='..'
bietet genau das, was Sie brauchen.
Beachten Sie, dass dies nicht nur für bash
richtig ist (und seine alias
Implementierung), sondern alle POSIX-kompatiblen Shells. Zitieren eines Beispiels aus man 1p alias
(Das Handbuch beschreibt diese Funktion nicht explizit, sondern nur anhand eines Beispiels):
-
Richten Sie nohup so ein, dass es mit einem Argument umgehen kann, das selbst ein Aliasname ist:
alias nohup="nohup "
Warnung: Wie @PeterCordes in seinem Kommentar schreibt, wird es automatisch andere verursachen Aliase, die erweitert werden sollen, wenn sie nach cd
geschrieben werden . Möglicherweise müssen Sie cd \grep
schreiben wenn Sie das Verzeichnis in eines mit dem Namen grep
ändern möchten aber Ihr grep
ist ein Alias für grep --color=auto
. Ohne den Backslash cd
meldet den Fehler "zu viele Argumente" (Sie können nicht cd
in zwei Verzeichnisse gleichzeitig)!.
Aliasse müssen das erste Wort sein eines Befehls. Außerdem muss der Alias durch ein Wort ersetzt werden daher keine Leerzeichen).
Bash-Referenzhandbuch:Aliasse
Aliasse ermöglichen es, ein Wort durch eine Zeichenfolge zu ersetzen wenn es als erstes Wort verwendet wird eines einfachen Befehls.
Sie könnten beide mit ..
aliasieren und ,,
muss cd ..
sein .
$ alias ..="cd .."
$ alias ,,="cd .."
$ cd /tmp && pwd
/tmp
$ ,, && pwd
/