Frecuentemente ejecuto el ls
comando después de ejecutar el cd
comando. ¿Cómo puedo crear un alias (como cs
) para esta operación?
fuente
Frecuentemente ejecuto el ls
comando después de ejecutar el cd
comando. ¿Cómo puedo crear un alias (como cs
) para esta operación?
De Bash Tips and Tricks: 'cd' con estilo :
Finalmente, quiero mostrarle cómo escribir su propio reemplazo personalizado para el comando 'cd'.
¿Te encuentras siempre escribiendo lo mismo al cambiar a un directorio? Probablemente al menos enumere los archivos allí cada vez, tal vez tanto que sus manos escriban automáticamente 'ls' después de cada 'cd'.
Bueno, al intentar todo lo que se me ocurre, resulta que solo hay una forma de lograr adecuadamente el objetivo que estamos buscando. Tenemos que crear una función de shell.
Las funciones de shell son parte de la programación de shell. Al igual que en los lenguajes de programación compilados, las funciones proporcionan una especie de modularización procesal. Se puede crear una función genérica para realizar un bit de lógica o cálculo de uso frecuente con diferentes parámetros. En este caso, el parámetro es el directorio de trabajo actual.
Aquí hay uno simple:
function cs () { cd $1 ls }
Como @geirha señala correctamente , la función anterior fallará si intenta cambiar a un directorio con un espacio en su nombre:
$ cs A\ B/
-bash: cd: A: No such file or directory
<current directory listing>
En su lugar, debe usar la siguiente función:
function cs () {
cd "$@" && ls
}
Una vez que agregue ese código a su ~/.bashrc
, debería poder hacer esto:
hello@world:~$ cs Documents/
example.pdf tunafish.odt
hello@world:~/Documents$
Puedes usar el
builtin
comando en bash:fuente
function ls() { /usr/bin/ls $* }
cd
porque tambiénrvm
cambia micd
definición. Ver stackoverflow.com/a/19941991/1601989Use una función en lugar de un alias:
fuente
Gracias Florian Diesch por el consejo de usar una función. No puedo usar
cs
como nombre porque hay uncs
comando en el paquete csound , así que lo usélc
.Agregué esto a
~/.bash_aliases
(nano ~/.bash_aliases
):El terminal debe ser
reset
para que esto surta efecto.fuente
$1
cita así hará que falle si el directorio contiene espacios en blanco. Además, debe verificar el valor de retorno decd
; si falla (por ejemplo, permiso denegado), no tiene sentido ejecutar ells
.lc() { cd "$@" && ls; }
Como una expansión para esta función:
cs() { cd "$1" && ls; }
, es posible que desee pasar todos los argumentos de la función quecd
utilizando$@
en lugar de"$1"
como tal:cs() { cd $@ && ls; }
.fuente
Tuve problemas para redefinir
cd
porque tambiénrvm
cambia micd
definición. Ver https://stackoverflow.com/a/19941991/1601989 . Realmente no quería usarlobuiltin
porque eso omitiría lo que sea quervm
esté haciendo.Agregué lo siguiente a mi
.bashrc
:Y luego, después de la
rmv
línea en.bashrc
:fuente