Manchmal, wenn ich in das übergeordnete Verzeichnis wechseln möchte, tippe ich versehentlich cd ,,
statt cd ..
. Gibt es eine Möglichkeit, wie ich bash sagen kann, dass diese Aussagen gleich sind? Ich benutze in meinen Befehlen niemals Kommas. Im Idealfall würde ich gerne alias ,,
dazu ..
. Als ich das versuchte, funktionierte es nicht. Warum hat das nicht funktioniert? Wie kann ich dieses Problem sonst lösen?
$ alias ,,=..
$ cd ,,
-bash: cd: ,,: No such file or directory
$ ,,
würden sich beschweren, wie zum Beispiel:bash: ..: Is a directory
. (Mit anderen Worten, es ist keine ausführbare Datei.)alias 'cd ,,'='cd ..'
. Nun, Sie konnten, aber Sie müssten es laufen lassencd\ ,,
, um alles ein Wort zu machen.)alias -g ,,=..
undcd ,,
funktioniert so, wie Sie es erwarten.find / -type d -exec ln -s .. {}/,, \;
... ;-)Antworten:
ZSH:
Wenn Sie verwenden,
zsh
alias -g ,,=".."
ist es das, was Sie benötigen, aber dies wird dazu führen, dass ",," überall erweitert wird, nicht nur, wenn es mit verwendet wirdcd
.Von
man zshbuiltins
:BASH:
Wenn Sie die Einschränkung auf
bash
(da die Frage mit bash gekennzeichnet ist ) haben, lesen Sie Folgendes:Dies ist, wie gewünscht, eine reine Alias-Lösung, die jedoch mehr als erforderlich ist und möglicherweise den Benutzer frustriert (siehe die Warnung am Ende meines Beitrags).
Zitat
man bash
:Daher reicht es aus, einen Alias
cd
mit einem zusätzlichen Leerzeichen zu versehen (um das nächste Argument zu erweitern) und dann einen Alias,,
mit..
. Siehst du dasgibt genau das was du brauchst.
Beachten Sie, dass dies nicht nur für
bash
(und dessenalias
Implementierung), sondern für alle POSIX-kompilierten Shells gilt. Zitieren eines Beispiels ausman 1p alias
(das Handbuch beschreibt diese Funktion nicht explizit, sondern nur anhand eines Beispiels):Warnung: Während @PeterCordes in seinen Kommentar schreibt, werden andere Aliase automatisch erweitert, wenn sie nachher geschrieben werden
cd
. Möglicherweise müssen Sie schreiben,cd \grep
wenn Sie das Verzeichnis in ein benanntes Verzeichnis ändern möchten, dasgrep
jedochgrep
ein Alias für istgrep --color=auto
. Ohne den umgekehrten Schrägstrichcd
wird der Fehler "zu viele Argumente" gemeldet (Sie können nichtcd
zwei Verzeichnisse gleichzeitig aufrufen).quelle
cd
in ein Verzeichnis des Quellcodes möchten . Oder andere Kollisionen zwischen Ihren Aliasnamen und allgemeinen Verzeichnisnamen. Gernecd dr
würde sichcd disown -r
für mich mit diesem Pseudonym erweitern. Jedenfalls ist es viel besser, builtincd
mit einer Funktion wie dieser zu überschreiben , IMO.Aliase sind nicht dazu gedacht, aber Sie können eine Funktion mit dem Namen "
cd
Wrapper" für den Real erstellencd
. Dieser arbeitet für mich! Legen Sie es einfach in Ihre.bash_profile
oder Ihre Profildatei Ihrer Wahl.Oder mit Kommentaren und hübscher Formatierung:
BEARBEITEN
Vielen Dank an @derobert für den Hinweis, dass dies
if then else
hier besser ist als&& ||
. Außerdem habe ich gerade festgestellt ( * facepalm *), dass diese Implementierung nur funktioniert, wenn Nicht-Pfad-Argumente (dh-L -P
) nicht das erste Argument sind. Seien Sie also gewarnt, wenn Sie schlechte Tippgewohnheiten habencd -L ,,
, hilft Ihnen dies nicht weiter. Und das ist nicht trivial, denke ich.quelle
$1
bevor Sie das eingebaute Programm ausführen:cd () { [ "$1" = ",," ] && set .. ; cd "$@"; }
set .. "${@:2}"
, oder Sie verlieren nach dem ersten Argument etwas...
nicht das erste Argument sein;cd
inbash
kann eine Vielzahl von Optionen nehmen (-P
,-L
,-@
,-e
).Aliase müssen das erste Wort eines Befehls sein. Auch der Alias muss durch ein Wort ersetzt werden ( daher keine Leerzeichen).
Sie könnten beide Alias
..
und,,
zu seincd ..
.quelle
cd ..
..
in Bash zu tun, besteht darin,shopt -s autocd
durch Eingabe des Namens in ein beliebiges Verzeichnis zu wechseln. Natürlich bist du immer noch der,,
Eine andere Möglichkeit,
..
das Verzeichnis zu ändern, besteht darin, die Bash-autocd
Funktion zu aktivieren :Das wird automatisch das Verzeichnis ändern, wenn Sie den Namen eines eingeben:
Sie müssen noch einen Alias für machen,
,,
aber das kann mit nur getan werdenalias ,,=..
quelle
Es gibt bereits
eine App miteinem Skript dafür: https://github.com/shyiko/commacd (keine Zugehörigkeit zu Stanley Shuyiko).Um Ihre Frage zu beantworten, verwendet das Skript Kommas als Alias für drei Funktionen, die es definiert:
quelle