it-swarm.com.de

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

Ich benutze Windows und Ubuntu parallel und mache auf beiden Konsolen-Sachen.

Unter Windows kann ich a

C:\Users\Thomas>cd..\..
C:\>

Unter Linux funktioniert dies jedoch weder mit Backslashes noch mit Forward-Slashes.

21:17:10 $ cd../..
bash: cd../..: No such file or directory

Da ich diesen Fehler oft mache, habe ich versucht, in .bash_aliases einen Alias ​​für diese Situation zu definieren:

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

Wenn ich eine neue Bash beginne, bekomme ich

21:16:26 $ bash
bash: alias: `cd../..': invalid alias name

Wie würde ich Aliase für cd..\.. und cd../.. korrekt einrichten?

Der cd..\.. scheint Probleme mit dem Escape-Zeichen zu haben:

21:39:43 $ cd..\..
bash: cd....: command not found

Es funktioniert nicht, auch wenn ich einen anderen Alias ​​für cd.... definiere.

11
Thomas Weller

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

Die Zeichen /, $, `und = sowie die oben aufgeführten Shell-Metazeichen oder Anführungszeichen erscheinen möglicherweise nicht in einem Aliasnamen.

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
/
10
fkraiem

In einem Aliasnamen können keine Schrägstriche verwendet werden. Bash lässt sie jedoch in Funktionsnamen zu, sodass Sie dies zu einer Funktion machen können:

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

Sie können keine Backslashes in einem Alias ​​oder Funktionsnamen verwenden. Das Backslash-Zeichen setzt das nächste Zeichen in Anführungszeichen, sodass cd..\.. als cd.... analysiert wird, bevor diese Zeichenfolge als Befehlsname gesucht wird. Wenn Sie einen Befehl mit dem Namen cd..\.. aufrufen möchten, müssen Sie cd..\\.., 'cd..\..' oder etwas Äquivalentes eingeben. Darüber hinaus wird ein Befehlsname, der in irgendeiner Weise in Anführungszeichen gesetzt wurde, für die Alias-Suche nicht berücksichtigt, sodass Sie niemals einen Aliasnamen verwenden können, der einen umgekehrten Schrägstrich enthält. Bash erlaubt auch keine Backslashes in Funktionsnamen. Da cd..\.. als cd.... analysiert wird, können Sie eine Funktion namens cd.... definieren (wie oben).

Wenn Sie den Befehl cd verwenden, müssen Sie wie bei jedem anderen Befehl das Leerzeichen danach eingeben. Sie können jedoch sparen, indem Sie cd überhaupt nicht eingeben. Setzen Sie die Option autocd mit der folgenden Zeile in ~/.bashrc:

shopt -s autocd

Dann können Sie einen Verzeichnisnamen in die Befehlszeile eingeben, und wenn Sie dieses Verzeichnis ausführen, wird es in dieses Verzeichnis geändert.

~/some/sub/directory$ ../..
~/some$ 
12
Gilles

Msgstr "Sie können keine Schrägstriche in einem Alias ​​oder einer Funktion name verwenden"? Das sind Neuigkeiten für mich. Ich benutze die folgende Shell-Funktion seit Jahren unter Linux und OS X und hatte nie Probleme:

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

Natürlich ist cd../.. 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 resultierende cd..... Also definieren Sie das und Sie können alles tun, was Sie wollten. Bitte schön.

function cd.... { cd ../..; } 
5
alexis

Wenn Sie die Aliase behalten möchten, tun Sie Folgendes:

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

Oder, wenn Sie gehen müssen Weg zurück:

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 dies Ihnen hilft, geistig 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 Dinge unter Windows gemacht werden.)

2
jon