Puedes hacer esto con una función:
$ cdls() { cd "$@" && ls; }
El &&
medio ' cd
a un directorio, y si tiene éxito (por ejemplo, el directorio existe), ejecute ls
'. Usar el &&
operador es mejor que usar un punto y coma ;
entre los dos comandos, como con { cd "$@" ; ls; }
. Este segundo comando se ejecutará ls
independientemente de si cd
funcionó o no. Si cd
falla, ls
imprimirá el contenido de su directorio actual, lo que será confuso para el usuario. Como práctica recomendada, use &&
y no ;
.
$ cdls /var/log
CDIS.custom fsck_hfs.log monthly.out system.log
$ pwd
/var/log
En general, es una mala práctica cambiar el nombre de un comando que ya existe, especialmente para un comando comúnmente llamado like cd
. En su lugar, cree un nuevo comando con un nombre diferente. Si sobrescribe cd
con una función o alias que también se nombra cd
, ¿qué sucedería cuando ingrese a un directorio con 100,000 archivos? Hay muchas utilidades que utilizan cd
, y pueden confundirse por este comportamiento inusual. Si usa una cuenta compartida (como root
cuando está trabajando con otros administradores del sistema), puede ser muy peligroso reemplazar un comando existente porque el entorno es diferente de lo que la gente espera.
pwd
. No estoy seguro si esta es una mejor práctica, pero se hace comúnmente. Consulte tldp.org/LDP/abs/html/aliases.html para ver algunos ejemplos.cd() { builtin cd "$@" && pwd; };
- utilizando el estándar bourne shell en macOS (Sierra 10.12.6)Tengo esto en mi .bashrc, y funciona bien.
Anteriormente en mi .bashrc tengo:,
[ -z "$PS1" ] && return
y todo después de esa línea solo se aplica a sesiones interactivas, por lo que esto no afecta elcd
comportamiento de los scripts.fuente
[ -z "$PS1" ] && return
?[ -z "$PS1" ]
comprueba si la$PS
(variable de solicitud interactiva) es "longitud cero" (-z). Si es de longitud cero, esto significa que no se ha configurado, por lo que Bash no debe ejecutarse en modo interactivo. La&& return
parte sale del abastecimiento.bashrc
en este punto, bajo estas condiciones.i
en"$-"
:case "$-" in *i*) ;; *) return ;; esac
.PS1
variable puede estar desarmada o vacía y el shell aún puede ser interactivo (pero sin un aviso). Lo comprobaría$-
para asegurarme.fuera del tema, ya que la pregunta está etiquetada / bash, pero como algunas preguntas están cerradas como duplicadas de esta, no se menciona bash:
Con zsh:
Zsh llama a la función chpwd () cada vez que cambia el directorio actual (por medio de cd, pushd, popd ...). tcsh tiene una característica similar y es probablemente de donde lo obtuvo zsh.
fuente
¿Por qué no agregar un alias a su archivo .bashrc?
Algo como:
fuente
La solución común de crear alias para el comando cd no es perfecta porque hay otros comandos que pueden cambiar su directorio actual como popd o incluso ejecutar un script con el comando cd en él.
Es mejor usar $ PROMPT_COMMAND Bash hook que ejecuta un comando antes de devolver un mensaje.
El comando (una función en nuestro caso) ejecutará ls solo si el directorio ha cambiado para reducir el ruido de la pantalla. Código para .bashrc:
fuente
Copia esto:
Ahora solo puedes hacer cd simple:
fuente
En bash, no puede recurrir a alias para acciones que requieren parámetros. Para esto hay funciones. Así que pon en tu
~/.bashrc
siguientefuente
cd "$1" && ls
seria mejor.function mycd { builtin cd "$1" && ls "$2" }
.Coloque el siguiente código en el .profile y funciona. Probado en la caja HP-Unix.
fuente
Aún más útil, con la capacidad de retroceder en la historia :
Cuando cambie el directorio
Stack: (current_dir) (previous_dir) ...
, se mostrará una línea con: y luego lals
salida. Para volver atrás en la historia directorios sólo pop este comando:popd
.Agregué
else
para que vea un error cuando intente ir a un directorio incorrecto.fuente
Creo que es bueno habilitar
ls
las opciones de esta manera, ya quecd
no tiene opción.fuente
cd
toma opciones.Esto es lo que encuentro útil (en Debian 9):
Esto me da una salida truncada con puntos suspensivos en caso de que haya demasiados elementos en ese directorio para que la consola se mantenga limpia:
fuente
fuente