Respuestas:
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.
function cd {
builtin cd "$@" && ls -F
}
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 el cd
comportamiento de los scripts.
[ -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:
chpwd() ls
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.
¿Por qué no agregar un alias a su archivo .bashrc?
Algo como:
alias cdls='cd "$@" && ls'
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:
#each console has its own file to save PWD
PrevDir=$(tty)
PrevDir=/tmp/prev-dir${PrevDir////-}
#don't ls when shell launched
echo $PWD > $PrevDir
LsAfterCd() {
[[ "$(< $PrevDir)" == "$PWD" ]] && return 0
ll --color=always | sed 1d
echo $PWD > $PrevDir
}
PROMPT_COMMAND=LsAfterCd
Copia esto:
altercd(){ cd(){ unset -f cd ; cd $*; ls ; altercd; } } ; altercd
Ahora solo puedes hacer cd simple:
cd /
(files listed)
cd /home
(files listed)
etc...
En bash, no puede recurrir a alias para acciones que requieren parámetros. Para esto hay funciones. Así que pon en tu ~/.bashrc
siguiente
mycd() {
cd "$1"
ls
}
function mycd { builtin cd "$1" && ls "$2" }
.
Coloque el siguiente código en el .profile y funciona. Probado en la caja HP-Unix.
cdl()
{
if [ "$#" = 0 ]; then
cd ~ && ls -ltr
elif [ -d "$@" ]; then
cd "$@" && ls -ltr
else
echo "$@" directory not found!!!
fi
}
#SET YOUR ALIAS TO CD
alias cd="cdl"
Aún más útil, con la capacidad de retroceder en la historia :
function cd() {
if [ -d "$@" ]; then
echo -n "Stack: "
pushd "$@"
ls
else
builtin cd "$@"
fi
}
function popd() {
builtin popd "$@" && ls
}
Cuando cambie el directorio Stack: (current_dir) (previous_dir) ...
, se mostrará una línea con: y luego la ls
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.
Creo que es bueno habilitar ls
las opciones de esta manera, ya que cd
no tiene opción.
cdls() {
cd ${$#} && ls ${@:0:$#-1}
}
cd
toma opciones.
Esto es lo que encuentro útil (en Debian 9):
c() {
cd "${@}" \
&& ls --color=always -C \
| sed '
# on line 5, print the line,
5 {
# append an ellipsis
a[...]
# and quit
q
}
# print lines 1-4 verbatim
'
}
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:
$ c data/git/buildroot/package/
4th lua-markdown
a10disp lua-messagepack
acl lua-msgpack-native
acpica luaossl
acpid lua-periphery
[...]
$ ls -1 | wc --lines
1977
alias cd='builtin cd $1 && ls -l && builtin cd $1'