Puis-je utiliser cd ../ .. comme nom d'alias?

11

J'utilise Windows et Ubuntu en parallèle et je fais des trucs de console sur les deux.

Sous Windows, je peux faire

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

Cependant, sous Linux, cela ne fonctionne pas, ni avec des barres obliques inverses ni avec des barres obliques.

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

Depuis que je fais souvent cette erreur, j'ai essayé de définir un alias .bash_aliasespour cette situation:

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

Quand je commence un nouveau bash, je reçois

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

Comment pourrais-je configurer des alias cd..\..et cd../..correctement?

Le cd..\..semble avoir des problèmes avec le caractère d'échappement:

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

Cela ne fonctionne pas, même si je définis un autre alias pour cd.....

Thomas Weller
la source
2
Tu ne peux pas. Une commande, un alias ou un nom de fichier ne peut pas contenir le /caractère. La \ version, en revanche, devrait fonctionner correctement.
fkraiem
@fkraiem: Il semble que la version barre oblique inverse ait des problèmes de caractère d'échappement. Mis à jour la question.
Thomas Weller
Oh, en effet. De man bash: Les caractères /, $, `et = et l'un des métacaractères du shell ou les caractères entre guillemets répertoriés ci-dessus peuvent ne pas apparaître dans un nom d'alias.
fkraiem
Zut. J'ai essayé man aliaset ça n'existait pas. Si vous donnez cette réponse, je l'accepterai.
Thomas Weller
Les alias sont une chose, les fonctions shell en sont une autre. Jetez un autre regard.
alexis

Réponses:

10

/et \figurent parmi les caractères qui ne peuvent pas apparaître dans un nom d'alias Bash. De man bash:

Les personnages /, $, `, et =et l' un des shell métacaractères ou de guillemets énumérés ci - dessus peuvent ne pas apparaître dans un nom d'alias.

Pour contourner ce problème, vous pouvez passer à Zsh, qui permet à la fois:

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

Vous ne pouvez pas utiliser de barres obliques dans un nom d'alias. Bash les autorise cependant dans les noms de fonctions, vous pouvez donc en faire une fonction:

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

Vous ne pouvez pas utiliser de barres obliques inverses dans un alias ou un nom de fonction. Le caractère barre oblique inverse cite le caractère suivant, il cd..\..est donc analysé également cd...., bien avant que cette chaîne ne soit recherchée comme nom de commande. Si vous voulez appeler une commande nommée cd..\.., vous devez taper cd..\\.., 'cd..\..'ou quelque chose d' équivalent. De plus, un nom de commande qui a été cité de quelque façon que ce soit n'est pas pris en compte pour la recherche d'alias, vous ne pouvez donc jamais utiliser un nom d'alias contenant une barre oblique inverse. Bash n'autorise pas non plus les barres obliques inverses dans les noms de fonction. Puisque cd..\..est analysé en tant que cd...., vous pouvez définir une fonction appelée cd....(comme ci-dessus).

Si vous utilisez la cdcommande, vous devrez taper l'espace après, comme n'importe quelle autre commande. Mais vous pouvez enregistrer la saisie en ne tapant pas cddu tout. Définissez l' autocdoption avec la ligne suivante dans ~/.bashrc:

shopt -s autocd

Ensuite, vous pouvez taper un nom de répertoire sur la ligne de commande, et «exécuter» ce répertoire y changera.

~/some/sub/directory$ ../..
~/some$ 
Gilles 'SO- arrête d'être méchant'
la source
Si je fais la shoptchose, je manquerai probablement cette fonctionnalité sous Windows bientôt :-)
Thomas Weller
Ce n'est pas vrai. Les barres obliques sont acceptées dans les noms de fonction bash.
alexis
@alexis Ah, à droite, vous pouvez utiliser des barres obliques dans bash. Fixé, merci.
Gilles 'SO- arrête d'être méchant'
@ThomasW. Bien sûr que tu le feras. autocdétait l'une des raisons pour lesquelles je suis passé à zsh, quand bash ne l'avait pas. La seule façon décente d'utiliser Windows est de toute façon d'installer Cygwin, avec zsh.
Gilles 'SO- arrête d'être méchant'
5

"Vous ne pouvez pas utiliser de barres obliques dans un alias ou un nom de fonction "? Ce sont des nouvelles pour moi. J'utilise la fonction shell suivante depuis des années sur Linux et OS X bash, et je n'ai jamais eu de problème:

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

Naturellement, cd../..c'est aussi un bon nom de fonction. Une barre oblique peut être utilisée dans un nom de fonction shell.

Quant à la version barre oblique inverse, vous ne pouvez pas l'intégrer dans un alias ou un nom de fonction, mais vous n'êtes pas obligé de le faire: lorsque vous tapez cd..\.., bash interprète la barre oblique inverse comme un échappement et essaie d'exécuter le résultat cd..... Alors définissez cela et vous pouvez faire tout ce que vous vouliez. Je vous en prie.

function cd.... { cd ../..; } 
alexis
la source
2

Si vous souhaitez conserver les alias, pourquoi ne pas simplement:

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

Ou, si vous avez besoin d'aller chemin de retour:

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

Je ne sais pas à quel point cela vous aide à rester mentalement synchronisé avec votre cerveau Windows, mais cela semble toujours être un moyen simple de procéder. (Au moins pour ceux d'entre nous qui ont la chance de ne pas avoir à se soucier de la façon dont les choses se font sous Windows.)

Jon
la source