Kann ich cd ../ .. als Aliasnamen verwenden?

11

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_aliasesfü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.....

Thomas Weller
quelle
2
Das kannst du nicht. Ein Befehl, Alias ​​oder Dateiname darf das /Zeichen nicht enthalten . Die \ Version sollte dagegen gut funktionieren.
Fkraiem
@fkraiem: Es scheint, dass die Backslash-Version Probleme als Escape-Charakter hat. Die Frage wurde aktualisiert.
Thomas Weller
Oh, in der Tat. Von man bash: Die Zeichen /, $, `und = sowie alle oben aufgeführten Shell-Metazeichen oder Anführungszeichen werden möglicherweise nicht in einem Aliasnamen angezeigt.
Fkraiem
Verdammt. Ich habe es versucht man aliasund es gab es nicht. Wenn Sie das als Antwort geben, werde ich es akzeptieren.
Thomas Weller
Aliase sind eine Sache, Shell-Funktionen eine andere. Schau es dir noch einmal an.
Alexis

Antworten:

10

/und \gehören zu den Zeichen, die in einem Bash-Aliasnamen nicht vorkommen können. Von man bash:

Die Zeichen /, $`, und =und eine der Shell - Metazeichen oder unter Angabe Zeichen oben aufgeführt sind, dürfen nicht in einem Aliasnamen angezeigt.

Um dieses Problem zu umgehen, können Sie zu Zsh wechseln, was beides ermöglicht:

% grep 'alias.*cd' .zshrc 
alias cd../..='cd ../..'
alias cd..\\..='cd ../..'
% pwd
/Users/firas
% cd../..
% pwd
/ 
% cd
% pwd
/Users/firas
% cd..\..
% pwd
/
fkraiem
quelle
12

Sie können keine Schrägstriche in einem Aliasnamen verwenden. Bash erlaubt sie jedoch in Funktionsnamen, sodass Sie daraus eine Funktion machen können:

cd../.. () { cd ../..; }

Sie können keine Backslashes in einem Alias- oder Funktionsnamen verwenden. Das Backslash-Zeichen zitiert das nächste Zeichen und wird daher cd..\..analysiert cd...., lange bevor diese Zeichenfolge als Befehlsname nachgeschlagen wird. Wenn Sie einen Befehl namens anrufen möchten cd..\.., müssen Sie eingeben cd..\\.., '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. Da cd..\..analysiert wird als cd...., können Sie eine Funktion definieren, die aufgerufen wird cd....(wie oben).

Wenn Sie den cdBefehl verwenden, müssen Sie wie bei jedem anderen Befehl das Leerzeichen danach eingeben. Sie können die Eingabe jedoch speichern, indem Sie überhaupt nicht eingeben cd. Stellen Sie die autocdOption mit der folgenden Zeile ein ~/.bashrc:

shopt -s autocd

Anschließend können Sie einen Verzeichnisnamen in die Befehlszeile eingeben, und das Ausführen dieses Verzeichnisses ändert sich in dieses Verzeichnis.

~/some/sub/directory$ ../..
~/some$ 
Gilles 'SO - hör auf böse zu sein'
quelle
Wenn ich das mache shopt, werde ich diese Funktionalität wahrscheinlich bald unter Windows vermissen :-)
Thomas Weller
Ähm, das stimmt nicht. Schrägstriche werden in Bash-Funktionsnamen akzeptiert.
Alexis
@alexis Ah, richtig, Sie können Schrägstriche in Bash verwenden. Behoben, danke.
Gilles 'SO - hör auf böse zu sein'
@ ThomasW. Natürlich wirst du. autocdwar 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.
Gilles 'SO - hör auf böse zu sein'
5

"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:

function ../.. { cd ../..; echo "$PWD"; }

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ühren cd..... Definieren Sie das und Sie können alles tun, wonach Sie gesucht haben. Bitte schön.

function cd.... { cd ../..; } 
alexis
quelle
2

Wenn Sie die Aliase behalten möchten, warum nicht einfach:

alias   ..='cd ..'
alias  ...='cd ../../' 
alias ....='cd ../../../'

Oder wenn Sie weit zurück müssen:

alias   .3='cd ../../../' 
alias   .4='cd ../../../../'
alias   .5='cd ../../../../../'
# how far back do you need to go on a normal basis..?

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.)

jon
quelle