A veces, cuando quiero cambiar al directorio principal, escribo por error en cd ,,
lugar de cd ..
. ¿Hay alguna manera de hacer que bash considere que estas declaraciones son las mismas? Nunca uso comas en mis comandos. Idealmente, me gustaría poner un alias ,,
a ..
. Cuando intenté esto, no funcionó. ¿Por qué no funcionó esto? ¿De qué otra forma puedo abordar este problema?
$ alias ,,=..
$ cd ,,
-bash: cd: ,,: No such file or directory
$ ,,
se queja, tales como:bash: ..: Is a directory
. (En otras palabras, no es un ejecutable.)alias 'cd ,,'='cd ..'
. Bueno, podrías, pero tendrías que ejecutarlo comocd\ ,,
si fuera una sola palabra.)alias -g ,,=..
ycd ,,
funciona como se espera que lo haga.find / -type d -exec ln -s .. {}/,, \;
... ;-)Respuestas:
ZSH:
Si está usando
zsh
alias -g ,,=".."
es lo que necesita, pero esto hará que ",," se expanda a todas partes, no solo cuando se use concd
.De
man zshbuiltins
:GOLPETAZO:
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
:Por lo tanto, es suficiente alias
cd
con un espacio adicional (para permitir la expansión de su próximo argumento) y luego alias,,
a..
. Mira esoda exactamente lo que necesitas.
Tenga en cuenta que esto es correcto no solo para
bash
(y sualias
implementación), sino para todos los shells compatibles con POSIX. Citando un ejemplo deman 1p alias
(el manual no describe esta característica explícitamente, solo a través de un ejemplo):Advertencia: como @PeterCordes escribe en su comentario, automáticamente hará que otros alias se expandan cuando se escriban después
cd
. Puede requerir que escribacd \grep
si desea cambiar el directorio a uno con nombre,grep
pero sugrep
es un alias paragrep --color=auto
. Sin la barra invertida,cd
se informará de un error de "demasiados argumentos" (¡no puede hacerlocd
en dos directorios a la vez!).fuente
cd
ingresar a un directorio de su código fuente. U otras colisiones entre sus alias y nombres de directorio comunes. Mecd dr
gustaría ampliarcd disown -r
para mí, con este alias. De todos modos, es mucho mejor anular builtincd
con una función para cosas como esta, IMO.Los alias no están destinados a hacer esto, pero puede crear una función llamada
cd
que sea un contenedor para lo realcd
. ¡Esta funciona para mí! Simplemente colóquelo en su.bash_profile
archivo de perfil o de su elección.O, con comentarios y formato bonito:
EDITAR
Gracias @derobert por señalar que
if then else
es mejor aquí que&& ||
. Además, me acabo de dar cuenta ( * facepalm *) de que esta implementación solo funcionará si los argumentos que no son 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 ayudará. Y eso no es trivial de manejar correctamente, creo.fuente
$1
antes de ejecutar el incorporado:cd () { [ "$1" = ",," ] && set .. ; cd "$@"; }
set .. "${@:2}"
, o pierdes algo después del primer argumento...
no tiene que ser el primer argumento;cd
enbash
puede tomar una variedad de opciones (-P
,-L
,-@
,-e
).Los alias deben ser la primera palabra de un comando. Además, el alias debe ser sustituido por una palabra, por lo tanto, sin espacios).
Podrías alias ambos
..
y,,
sercd ..
.fuente
cd ..
..
en Bash es con lashopt -s autocd
que le permite cambiar a cualquier directorio simplemente ingresando su nombre. Por supuesto que sigues siendo el alias para,,
Otra forma de
..
cambiar el directorio es habilitar laautocd
función de Bash :Eso cambiará automáticamente el directorio cuando ingrese el nombre de uno:
Todavía tiene que crear un alias,
,,
pero eso se puede hacer con soloalias ,,=..
fuente
Ya hay
una aplicación conun script para eso: https://github.com/shyiko/commacd (sin afiliación con Stanley Shuyiko).Para responder a su pregunta, el script alias comas a tres funciones que define:
fuente