Ich benutze Windows und Ubuntu parallel und mache Konsolen-Sachen auf beiden.
Unter Windows kann ich eine machen
C:\Users\Thomas>cd..\..
C:\>
Unter Linux funktioniert dies jedoch weder bei Backslashes noch bei Forward Slashes.
21:17:10 $ cd../..
bash: cd../..: No such file or directory
Da ich diesen Fehler oft mache, habe ich versucht, einen Alias .bash_aliases
für diese Situation zu definieren :
alias cd../..='cd ../..'
alias cd..\..='cd ../..'
Wenn ich eine neue Bash starte, bekomme ich
21:16:26 $ bash
bash: alias: `cd../..': invalid alias name
Wie würde ich Aliase für cd..\..
und cd../..
korrekt einrichten ?
Das cd..\..
scheint Probleme mit dem Fluchtcharakter zu haben:
21:39:43 $ cd..\..
bash: cd....: command not found
Es funktioniert nicht, auch wenn ich einen anderen Alias für definiere cd....
.
/
Zeichen nicht enthalten . Die\
Version sollte dagegen gut funktionieren.man bash
: Die Zeichen /, $, `und = sowie alle oben aufgeführten Shell-Metazeichen oder Anführungszeichen werden möglicherweise nicht in einem Aliasnamen angezeigt.man alias
und es gab es nicht. Wenn Sie das als Antwort geben, werde ich es akzeptieren.Antworten:
/
und\
gehören zu den Zeichen, die in einem Bash-Aliasnamen nicht vorkommen können. Vonman bash
:Um dieses Problem zu umgehen, können Sie zu Zsh wechseln, was beides ermöglicht:
quelle
Sie können keine Schrägstriche in einem Aliasnamen verwenden. Bash erlaubt sie jedoch in Funktionsnamen, sodass Sie daraus eine Funktion machen können:
Sie können keine Backslashes in einem Alias- oder Funktionsnamen verwenden. Das Backslash-Zeichen zitiert das nächste Zeichen und wird daher
cd..\..
analysiertcd....
, lange bevor diese Zeichenfolge als Befehlsname nachgeschlagen wird. Wenn Sie einen Befehl namens anrufen möchtencd..\..
, müssen Sie eingebencd..\\..
,'cd..\..'
oder etwas Gleichwertiges. Darüber hinaus wird ein Befehlsname, der in irgendeiner Weise in Anführungszeichen gesetzt wurde, bei der Aliasuche nicht berücksichtigt, sodass Sie niemals einen Aliasnamen verwenden können, der einen Backslash enthält. Bash erlaubt auch keine Backslashes in Funktionsnamen. Dacd..\..
analysiert wird alscd....
, können Sie eine Funktion definieren, die aufgerufen wirdcd....
(wie oben).Wenn Sie den
cd
Befehl verwenden, müssen Sie wie bei jedem anderen Befehl das Leerzeichen danach eingeben. Sie können die Eingabe jedoch speichern, indem Sie überhaupt nicht eingebencd
. Stellen Sie dieautocd
Option mit der folgenden Zeile ein~/.bashrc
:Anschließend können Sie einen Verzeichnisnamen in die Befehlszeile eingeben, und das Ausführen dieses Verzeichnisses ändert sich in dieses Verzeichnis.
quelle
shopt
, werde ich diese Funktionalität wahrscheinlich bald unter Windows vermissen :-)autocd
war einer der Gründe, warum ich zu zsh gewechselt bin, als bash es nicht hatte. Die einzig vernünftige Möglichkeit, Windows zu verwenden, besteht darin, Cygwin mit zsh zu installieren."Sie können keine Schrägstriche in einem Alias- oder Funktionsnamen verwenden"? Das sind Neuigkeiten für mich. Ich verwende seit Jahren die folgende Shell-Funktion unter Linux und OS X und hatte nie Probleme:
Natürlich
cd../..
ist auch ein guter Funktionsname. Ein Schrägstrich kann in einem Shell-Funktionsnamen verwendet werden.Die Backslash-Version kann nicht in einen Alias- oder Funktionsnamen eingebettet werden, muss aber nicht: Wenn Sie
cd..\..
eingeben, interpretiert bash den Backslash als Escape und versucht, das Ergebnis auszuführencd....
. Definieren Sie das und Sie können alles tun, wonach Sie gesucht haben. Bitte schön.quelle
Wenn Sie die Aliase behalten möchten, warum nicht einfach:
Oder wenn Sie weit zurück müssen:
Keine Ahnung, wie gut das Ihnen hilft, mental mit Ihrem Windows-Gehirn synchron zu bleiben, aber dies scheint immer noch ein einfacher Weg zu sein. (Zumindest für diejenigen von uns, die das Glück haben, sich keine Gedanken darüber machen zu müssen, wie die Dinge unter Windows gemacht werden.)
quelle