Puedes hacer esto con una función:
$ cdls() { cd "$@" && ls; }
El &&medio ' cda 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á lsindependientemente de si cdfuncionó o no. Si cdfalla, lsimprimirá 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 cdcon 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 rootcuando 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" ] && returny todo después de esa línea solo se aplica a sesiones interactivas, por lo que esto no afecta elcdcomportamiento 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&& returnparte sale del abastecimiento.bashrcen este punto, bajo estas condiciones.ien"$-":case "$-" in *i*) ;; *) return ;; esac.PS1variable 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
~/.bashrcsiguientefuente
cd "$1" && lsseria 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 lalssalida. Para volver atrás en la historia directorios sólo pop este comando:popd.Agregué
elsepara que vea un error cuando intente ir a un directorio incorrecto.fuente
Creo que es bueno habilitar
lslas opciones de esta manera, ya quecdno tiene opción.fuente
cdtoma 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