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
zshalias -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
cdcon 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 sualiasimplementació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 \grepsi desea cambiar el directorio a uno con nombre,greppero sugrepes un alias paragrep --color=auto. Sin la barra invertida,cdse informará de un error de "demasiados argumentos" (¡no puede hacerlocden dos directorios a la vez!).fuente
cdingresar a un directorio de su código fuente. U otras colisiones entre sus alias y nombres de directorio comunes. Mecd drgustaría ampliarcd disown -rpara mí, con este alias. De todos modos, es mucho mejor anular builtincdcon una función para cosas como esta, IMO.Los alias no están destinados a hacer esto, pero puede crear una función llamada
cdque sea un contenedor para lo realcd. ¡Esta funciona para mí! Simplemente colóquelo en su.bash_profilearchivo de perfil o de su elección.O, con comentarios y formato bonito:
EDITAR
Gracias @derobert por señalar que
if then elsees 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
$1antes 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;cdenbashpuede 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 autocdque 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 laautocdfunció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