Parfois, lorsque je veux changer de répertoire parent, je tape par erreur cd ,,
au lieu de cd ..
. Est-ce que je peux faire en sorte que ces déclarations soient les mêmes? Je n'utilise jamais de virgule dans mes commandes. Idéalement, je voudrais alias ,,
à ..
. Quand j'ai essayé ça, ça n'a pas marché. Pourquoi ça n'a pas marché? Comment puis-je aborder ce problème?
$ alias ,,=..
$ cd ,,
-bash: cd: ,,: No such file or directory
Si vous utilisez zsh
alias -g ,,=".."
, c'est ce dont vous avez besoin, mais cela entraînera le développement de "," partout, pas seulement lorsqu'il est utilisé avec cd
.
De man zshbuiltins
:
Si l'indicateur
-g
est présent, définissez un alias global; Les alias globaux sont développés même s'ils ne se trouvent pas en position de commandement.
Si restreint à bash
(car la question est étiquetée avec bash ), lisez ce qui suit:
Ceci est une solution pure-alias, comme demandé, cependant cela fera plus que nécessaire frustrant éventuellement l'utilisateur (voir l'avertissement à la fin de mon message).
Citer man bash
:
Si le dernier caractère de la valeur de l'alias est vide, la commande suivante Word suivant l'alias est également vérifiée pour le développement de l'alias.
Par conséquent, il suffit d'alias cd
avec un espace supplémentaire (pour permettre le développement de son argument suivant), puis d'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 implémentation alias
), mais pour tous les shells POSIX-compilant. Citant un exemple de man 1p alias
(le manuel ne décrit pas cette fonctionnalité explicitement, mais 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 écrit dans son commentaire, cela entraînera automatiquement d'autres alias à se développer lorsqu'ils sont écrits après cd
. Vous devrez peut-être écrire cd \grep
si vous souhaitez modifier le répertoire en un nom nommé grep
, mais votre grep
est un alias pour grep --color=auto
. Sans la barre oblique inversée, cd
signalera l'erreur "trop d'arguments" (vous ne pouvez pas cd
dans deux répertoires à la fois)! !.
Les alias ne sont pas censés faire cela, mais vous pouvez créer une fonction appelée cd
qui est un wrapper pour la vraie cd
. Celui-ci fonctionne pour moi! Il suffit de le mettre dans votre .bash_profile
ou votre fichier de profil de choix.
cd () { if [ "$1" = ",," ]; then builtin cd ..; else builtin cd "$@"; fi; }
Ou, avec des commentaires et un joli formatage:
cd ()
{
if [ "$1" = ",," ]; then # if first argument is ",,"...
builtin cd .. # call the builtin cd with ".." instead...
else
builtin cd "$@" # else call builtin cd with original arguments
fi
}
EDIT
Merci à @derobert pour avoir souligné que if then else
est meilleur ici que && ||
. De plus, je viens de me rendre compte ( * facepalm *) que cette implémentation ne fonctionnera que si des arguments autres que le chemin d'accès (à savoir -L -P
) ne sont pas le premier argument. Soyez donc averti, si vous avez la mauvaise habitude de taper cd -L ,,
, cela ne vous aidera pas. Et ce n’est pas trivial de le gérer correctement, je pense.
Les alias doivent être le premier mot d'une commande. En outre, l'alias doit être substitué à un mot donc pas d'espaces).
Manuel de référence Bash: Alias
Les alias permettent de substituer une chaîne à un Wordlorsqu'elle est utilisée comme premier Wordd'une commande simple.
Vous pouvez également alias ..
et ,,
pour être cd ..
.
$ alias ..="cd .."
$ alias ,,="cd .."
$ cd /tmp && pwd
/tmp
$ ,, && pwd
/
Un autre moyen de modifier le répertoire ..
consiste à activer la fonctionnalité autocd
de Bash :
shopt -s autocd
Cela changera automatiquement le répertoire lorsque vous en saisirez le nom:
~$ /tmp
cd /tmp
/tmp$
Vous devez toujours créer un alias pour ,,
, mais vous pouvez le faire avec seulement alias ,,=..
.
Il y a déjà une application un script pour cela: https://github.com/shyiko/commacd (aucune affiliation avec Stanley Shuyiko).
commacd
exporte trois commandes:,
(pour sauter en avant),,,
(en arrière) et,,,
(en arrière + en avant):Tous les trois essaient de faire correspondre par préfixe en premier. Seulement si aucun résultat n'est trouvé, ils se replieront en correspondance de sous-chaîne (floue)
Pour répondre à votre question, le script aliases virgules à trois fonctions qu’il définit:
alias ,=_commacd_forward
alias ,,=_commacd_backward
alias ,,,=_commacd_backward_forward