Frecuentemente ejecuto el lscomando después de ejecutar el cdcomando. ¿Cómo puedo crear un alias (como cs) para esta operación?
fuente
Frecuentemente ejecuto el lscomando después de ejecutar el cdcomando. ¿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
builtincomando en bash:fuente
function ls() { /usr/bin/ls $* }cdporque tambiénrvmcambia micddefinició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
cscomo nombre porque hay uncscomando en el paquete csound , así que lo usélc.Agregué esto a
~/.bash_aliases(nano ~/.bash_aliases):El terminal debe ser
resetpara que esto surta efecto.fuente
$1cita 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 quecdutilizando$@en lugar de"$1"como tal:cs() { cd $@ && ls; }.fuente
Tuve problemas para redefinir
cdporque tambiénrvmcambia micddefinición. Ver https://stackoverflow.com/a/19941991/1601989 . Realmente no quería usarlobuiltinporque eso omitiría lo que sea quervmesté haciendo.Agregué lo siguiente a mi
.bashrc:Y luego, después de la
rmvlínea en.bashrc:fuente