Casi cada vez que 'cd' a un directorio diferente en mi máquina (en este caso, ejecutando Mac OS X 10.6.7) a través de la línea de comando (que es bash), escribo inmediatamente 'ls' para obtener la lista de contenidos en ese directorio Estoy tratando de encontrar una manera de anular 'cd' para que cambie al directorio solicitado y luego me dé la lista de una vez.
He podido obtener la funcionalidad básica que estoy buscando trabajando con la siguiente línea agregada a mi ~ / .bash_profile
function cl() { cd "$@"; ls -l; }
Esto funciona como se esperaba. Cambiando al directorio solicitado y luego mostrándome el contenido. Donde me encuentro con un problema es intentar anular "cd" en lugar de crear un nuevo comando "cl".
Las siguientes cosas no funcionan
##### Attempt 1 #####
# Hangs the command line
function cd() { cd "$@"; ls -l; }
##### Attempt 2 #####
# Hangs the command line
function cd() { 'cd' "$@"; ls -l; }
##### Attempt 3 #####
# Does not change directory.
# Does list contents, but of the directory where you started.
function cd() { /usr/bin/cd "$@"; ls -l; }
#### Other attempts that fail in various ways #####
alias cd=cd "$@"; ls -la;
alias cd="cd '$@'; ls -la;"
alias cd='cd "$@"'; ls -la;
alias cd=/usr/bin/cd "$@"; ls -la;
También probé varias otras iteraciones que no figuran en la lista, así como hacer un alias que apunta a la función de trabajo 'cl'. Ninguno de los cuales funcionó.
Lo que he leído en la documentación habla sobre el hecho de que 'cd' no se puede ejecutar como un comando externo (que es lo que entiendo que es la forma en que la función necesitaría usarlo).
Entonces, actualmente puedo usar mi comando "cl" y obtener lo que quiero, pero la pregunta es / sigue siendo:
¿Hay alguna forma de anular el comportamiento de 'cd' para que cambie al directorio solicitado y luego haga algo más después?
fuente
cd ""
(a lo que esta respuesta debería evaluar es diferente decd "$@"
vacío)$@
. Perdón por la confusión.Creo que te estás quedando atrás. Su
cd
función está llamandocd
, que es ... la función.builtin
Debe saber cuál es una palabra clave que hace que la búsqueda de comandos use los Bash incorporados como cd y no su funciónAdemás, llamar
/usr/bin/cd
nunca funcionará, incluso si tal comando existiera.Qué pasaría:
/bash/dir
./usr/bin/cd /dir/for/cd
./usr/bin/cd
va a dir/dir/for/cd
./usr/bin/cd
salidas/bash/dir
, porque el proceso secundario/usr/bin/cd
no puede afectar al padre.También los alias son sustituciones de texto simples. Nunca pueden tener parámetros.
fuente
builtin cd $@ && ls
; ya que lacd
llamada debe tener éxito para que todo lo demás tenga sentido. Además, recuerde casos especiales comocd
(sin argumento).Sugiero no anular el cd porque hay otros scripts que secuestran la función 'cd', por ejemplo, rvm. Sería mejor elegir otro nombre, como 'd', y no especificar el tipo 'incorporado' en su función; de lo contrario, el secuestrador no funcionaría. Estoy usando el siguiente código:
fuente