¿Puedo modificar un comando de terminal para hacer cosas adicionales?

8

He buscado en los alias, funciones ... pero no he encontrado nada satisfactorio. Déjame darte un par de escenarios:

  • 95% de las veces que cd en una carpeta, hago un seguimiento con ls comando.
  • 90% de las veces que yo mkdir , yo cd en esto.

Tienes la idea.

¿Cuál sería la forma "más limpia" de unir esos comandos (u otra funcionalidad)?

    
pregunta Carles Alcolea 20.09.2015 - 23:36

4 respuestas

4

Puedes poner estas líneas en tu .zsrhc o .bashrc

[ -z "$PS1" ] && return
function cd {
builtin cd "$@" && ls -F
}

Resultado - >

Explicaciónde esta respuesta :

  

Anteriormente en mi .bashrc tengo: [-z "$ PS1"] & & volver, y todo   después de esa línea solo se aplica a las sesiones interactivas, por lo que esto no   afecta cómo se comporta cd en los scripts.

Más información en este comentario :

  

[-z "$ PS1"] verifica si $ 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. El & & en este punto, bajo estas condiciones, devuelva las salidas de parte de la fuente .bashrc.

Por cierto, gracias por la pregunta, es realmente genial :)

Editar:

Otra solución sería integrar su ls a su solicitud; Estoy seguro de que puedes hacer eso con OhMyZsh;)

    
respondido por el StrawHara 23.09.2015 - 16:28
13

Tendré a hacer un nuevo comando para esto. Creo que incluso sería lógico combinarlos en uno solo.

go() {
    if [ -d "$1" ]; then
        cd "$1" && ls
    else
        mkdir -p "$1" && echo "Created directory $1" && cd "$1"
    fi
}
    
respondido por el Random832 21.09.2015 - 07:57
6

He intentado agregar cosas como estas a mi .bashrc :

cd() {
    command cd "$@"
    command ls
}

mkdir() {
    command mkdir "$@"
    command cd "$@"
}

Sin embargo, he encontrado que esto puede desordenar los scripts que usan los comandos anulados, y el manejo de opciones puede ser frágil (por ejemplo, si desea pasar -p al comando mkdir anterior, también es pasado a cd ). Mejor sería simplemente definir alias con nombres diferentes (por ejemplo, c o mcd ).

    
respondido por el arxanas 21.09.2015 - 04:26
5

Creo que las funciones son el camino a seguir. Algo como

chglist() {
    cd "$1" && ls
}

como ejemplo.

    
respondido por el fd0 20.09.2015 - 23:59

Lea otras preguntas en las etiquetas