Les alias ne sont pas destinés à cela, mais vous pouvez créer une fonction appelée cd
c'est un wrapper pour le vrai cd
. Celui-ci fonctionne pour moi! Mettez-le simplement dans votre .bash_profile
ou votre fichier de profil de choix.
cd () { if [ "$1" = ",," ]; then builtin cd ..; else builtin cd "[email protected]"; fi; }
Ou, avec des commentaires et une jolie mise en forme :
cd ()
{
if [ "$1" = ",," ]; then # if first argument is ",,"...
builtin cd .. # call the builtin cd with ".." instead...
else
builtin cd "[email protected]" # else call builtin cd with original arguments
fi
}
MODIFIER
Merci @derobert d'avoir signalé que if then else
est mieux ici que && ||
. Aussi, je viens de réaliser (*facepalm *) que cette implémentation ne fonctionnera que si des arguments non-path (c'est-à-dire -L -P
) ne sont pas le premier argument. Soyez donc prévenu, si vous avez la mauvaise habitude de taper cd -L ,,
cela ne va pas vous aider. Et ce n'est pas trivial à gérer correctement, je pense.
ZSH :
Si vous utilisez zsh
alias -g ,,=".."
est ce dont vous avez besoin, mais cela entraînera l'expansion de ",," partout, pas seulement lorsqu'il est utilisé avec cd
.
De man zshbuiltins
:
Si le
-g
flag est présent, définissez un alias global ; les alias globaux sont développés même s'ils n'apparaissent pas en position de commande.
BASH :
Si limité à bash
(comme la question est taguée avec bash), lisez ce qui suit :
Il s'agit d'une solution purement alias, comme demandé, cependant cela fera plus que nécessaire, frustrant éventuellement l'utilisateur (voir l'avertissement à la fin de mon message).
Citant man bash
:
Si le dernier caractère de la valeur de l'alias est un espace, le mot de commande suivant l'alias est également vérifié pour l'expansion de l'alias.
Il suffit donc d'aliaser cd
avec un espace supplémentaire (pour permettre l'expansion de son argument suivant) puis l'alias ,,
à ..
. Regarde ça
alias cd='cd '
alias ,,='..'
donne exactement ce dont vous avez besoin.
Notez que ceci est correct non seulement pour bash
(et son alias
implémentation), mais tous les shells compatibles POSIX. Citant un exemple de man 1p alias
(le manuel ne décrit pas explicitement cette fonctionnalité, uniquement à travers un exemple) :
Configurez nohup pour qu'il puisse traiter un argument qui est lui-même un nom d'alias :
alias nohup="nohup "
Avertissement : Comme @PeterCordes l'écrit dans son commentaire, cela causera automatiquement autre alias à développer lorsqu'ils sont écrits après cd
. Cela peut nécessiter que vous écriviez cd \grep
si vous voulez changer de répertoire en un nommé grep
mais votre grep
est un alias pour grep --color=auto
. Sans la barre oblique inverse, cd
rapportera l'erreur "trop d'arguments" (vous ne pouvez pas cd
à deux répertoires à la fois) !.
Les alias doivent être le premier mot d'une commande. De plus, l'alias doit être remplacé par un mot donc pas d'espaces).
Manuel de référence de Bash :Alias
Les alias permettent de substituer une chaîne à un mot lorsqu'il est utilisé comme premier mot d'une simple commande.
Vous pouvez alias les deux ..
et ,,
être cd ..
.
$ alias ..="cd .."
$ alias ,,="cd .."
$ cd /tmp && pwd
/tmp
$ ,, && pwd
/