Los alias no están destinados a hacer esto, pero puede crear una función llamada cd
eso es un envoltorio para el verdadero cd
. ¡Esta funciona para mí! Solo ponlo en tu .bash_profile
o el archivo de perfil de su elección.
cd () { if [ "$1" = ",," ]; then builtin cd ..; else builtin cd "[email protected]"; fi; }
O, con comentarios y un bonito formato:
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
}
EDITAR
Gracias @derobert por señalar que if then else
es mejor aquí que && ||
. Además, me acabo de dar cuenta (*facepalm *) que esta implementación solo funcionará si hay argumentos que no sean de ruta (es decir, -L -P
) no son el primer argumento. Así que ten cuidado, si tienes la mala costumbre de escribir cd -L ,,
esto no te va a ayudar. Y eso no es trivial de manejar correctamente, creo.
ZSH:
Si estás usando zsh
alias -g ,,=".."
es lo que necesita, pero esto hará que "," se expanda en todas partes, no solo cuando se usa con cd
.
Desde man zshbuiltins
:
Si el -g
la bandera está presente, defina un alias global; los alias globales se expanden incluso si no aparecen en la posición de comando.
BASH:
Si está restringido a bash
(ya que la pregunta está etiquetada con bash), lea lo siguiente:
Esta es una solución de alias puro, según lo solicitado, sin embargo esto hará más de lo necesario posiblemente frustrando al usuario (vea la advertencia al final de mi publicación).
Citando man bash
:
Si el último carácter del valor del alias está en blanco, la siguiente palabra de comando que sigue al alias también se comprueba para la expansión del alias.
Por lo tanto, es suficiente con alias cd
con un espacio adicional (para permitir la expansión de su próximo argumento) y luego alias ,,
a ..
. Mira eso
alias cd='cd '
alias ,,='..'
da exactamente lo que necesitas.
Tenga en cuenta que esto es correcto no solo para bash
(y su alias
implementación), pero todos los shells compatibles con POSIX. Citando un ejemplo de man 1p alias
(el manual no describe esta función explícitamente, solo a través de un ejemplo):
-
Configure nohup para que pueda manejar un argumento que es en sí mismo un nombre de alias:
alias nohup="nohup "
Advertencia: Como escribe @PeterCordes en su comentario, automáticamente causará otro alias para expandir cuando se escribe después de cd
. Puede requerir que escribas cd \grep
si desea cambiar el directorio a uno llamado grep
pero tu grep
es un alias para grep --color=auto
. Sin la barra invertida, cd
informará el error "demasiados argumentos" (no puede cd
a dos directorios a la vez)!.
Los alias deben ser la primera palabra de un comando Además, el alias debe sustituirse por una palabra por lo tanto, sin espacios).
Manual de referencia de Bash:Alias
Los alias permiten sustituir una cadena por una palabra cuando se usa como la primera palabra de un simple comando.
Podrías alias tanto ..
y ,,
ser cd ..
.
$ alias ..="cd .."
$ alias ,,="cd .."
$ cd /tmp && pwd
/tmp
$ ,, && pwd
/