En zsh
, a menudo hago:
cd /path/to/somefile(:h)
( h
para head
).
Si somefile
es un enlace simbólico, también puede hacer:
cd somefile(:A:h)
Para llegar al directorio donde se puede encontrar el destino del enlace simbólico.
El zsh
equivalente de la bash
única solución de Chris ahora sería:
cd() {
[[ ! -e $argv[-1] ]] || [[ -d $argv[-1] ]] || argv[-1]=${argv[-1]%/*}
builtin cd "$@"
}
En zsh
, también puedes redefinir lo que las "palabras" Ctrl-Weliminan.
En zsh
, "palabras" en el contexto de los widgets de movimiento / transposición / eliminación basados en palabras son secuencias de alnums más los caracteres en la $WORDCHARS
variable que por defecto incluye /
.
Puede eliminar /
de $WORDCHARS
modo que Ctrl-Wsolo elimine un componente de ruta:
WORDCHARS=${WORDCHARS/\/}
Otra extensión útil es el select-word-style
widget que puede usar para elegir interactivamente entre diferentes estilos de palabras.
autoload select-word-style
zle -N select-word-style
bindkey '\ew' select-word-style
Luego, presionar le Alt-Wpermite elegir entre diferentes estilos de palabras.
$ cd /blah/blih<Alt-W>
Word styles (hit return for more detail):
(b)ash (n)ormal (s)hell (w)hitespace (d)efault (q)uit
(B), (N), (S), (W) as above with subword matching
?
zsh
y los estilos de palabras. Gracias también por elzsh
comando. Hace el trabajo perfectamente.Supongo que aún desea conservar la funcionalidad original si ingresa un directorio y lo está utilizando
bash
.Si nunca va a utilizar las opciones de CD (
-P
, etc.), esto también será suficiente:fuente
builtin
en frente de lascd
llamadascd
opciones no funcionazsh
. El más simple funciona bienzsh
, PEROcd
ya no es equivalente acd ~
: /[ -z "$1" ]
fue suficiente. Acepté la respuesta de Stephane para darle más visibilidad, ya que parece ser la mejor soluciónzsh
.Puede usar
dirname
para quitar el nombre de archivo de la ruta, p. Ej.Ver
man dirname
.fuente
Si agrega esto a su
.profile
, luego lo carga (source ~/.profile
o cierra sesión y vuelve a iniciar sesión),mycd [file or directory]
lo llevará al directorio correcto:Si lo nombra
cd
, entonces sucederán cosas extrañas.fuente
zsh
.cd
, como-P
.fuente
$(sudo reboot)
, esta función puede reiniciar el sistema. Además, el usuario está utilizandozsh
, nobash
.cd '$(sudo reboot)'
cambiaría el directorio, mientras que su función intentaría evaluar el nombre.