GNU/Linux >> Tutoriales Linux >  >> Linux

En Bash, ¿cuándo alias, cuándo escribir y cuándo escribir una función?

Me tomó casi 10 años de uso de Linux hacer esta pregunta. Todo fue prueba y error y navegación aleatoria por Internet a altas horas de la noche.

Pero la gente no debería necesitar 10 años para esto. Si recién estuviera comenzando con Linux, me gustaría saber:¿Cuándo crear un alias, cuándo crear una secuencia de comandos y cuándo escribir una función?

En lo que respecta a los alias, los uso para operaciones muy simples que no requieren argumentos.

alias houston='cd /home/username/.scripts/'

Eso parece obvio. Pero algunas personas hacen esto:

alias command="bash bashscriptname"

(y agréguelo a .bashrc archivo)

¿Hay una buena razón para hacer eso? Me estoy esforzando mucho, pero realmente no puedo pensar en ninguna circunstancia en la que me gustaría hacer eso. Entonces, si hay un caso extremo en el que eso marcaría la diferencia, responda a continuación.

Porque ahí es donde simplemente pondría algo en mi RUTA y chmod +x que es otra cosa que vino después de años de prueba y error de Linux.

Lo que me lleva al siguiente tema. Por ejemplo, agregué una carpeta oculta (.scripts/ ) en el directorio de inicio de mi RUTA simplemente agregando una línea a mi .bashrc (PATH=$PATH:/home/username/.scripts/ ), por lo que cualquier archivo ejecutable allí se autocompleta automáticamente.

Si fuera necesario.

Sin embargo, realmente no necesito eso, ¿verdad? Solo lo usaría para lenguajes que no son el shell, como Python.

Si es el shell, puedo escribir una función dentro del mismo .bashrc :

funcname () {
  somecommand -someARGS "[email protected]"
}

Como dije, descubrí mucho de esto a través de prueba y error. Y solo vi realmente la belleza de las funciones cuando mi computadora murió y me vi obligado a usar las computadoras de las personas que me rodeaban cuando no las estaban usando.

En lugar de mover un directorio completo de secuencias de comandos de una computadora a otra, terminé reemplazando el .bashrc de todos los demás con el mío, ya que nunca habían hecho una sola modificación.

¿Pero me perdí algo?

Entonces, ¿qué le diría a un usuario principiante de Linux acerca de cuándo crear un alias, cuándo crear una secuencia de comandos y cuándo escribir una función?

Si no es obvio, supongo que las personas que respondan esto utilizarán las tres opciones. Si solo usa alias, o solo usa scripts, o solo usa funciones, o si solo usa alias y scripts o alias y funciones o scripts y funciones —esta pregunta no está dirigida a ti.

Respuesta aceptada:

Un alias no debería (en general) hacer más que cambiar las opciones predeterminadas de un comando. No es más que un simple reemplazo de texto en el nombre del comando. No puede hacer nada con los argumentos sino pasarlos al comando que realmente ejecuta. Entonces, si simplemente necesita agregar un argumento al principio de un solo comando, un alias funcionará. Ejemplos comunes son

# Make ls output in color by default.
alias ls="ls --color=auto"
# make mv ask before overwriting a file by default
alias mv="mv -i"

Se debe usar una función cuando necesita hacer algo más complejo que un alias, pero eso no sería útil por sí solo. Por ejemplo, tome esta respuesta sobre una pregunta que hice sobre cómo cambiar grep Comportamiento predeterminado dependiendo de si está en una canalización:

grep() { 
    if [[ -t 1 ]]; then 
        command grep -n "[email protected]"
    else 
        command grep "[email protected]"
    fi
}

Es un ejemplo perfecto de una función porque es demasiado compleja para un alias (requiere diferentes valores predeterminados según una condición), pero no es algo que necesitará en un script no interactivo.

Relacionado:¿Cómo hacer que un script se ejecute retroactivamente como root?

Si obtiene demasiadas funciones o funciones demasiado grandes, colóquelas en archivos separados en un directorio oculto y búsquelos en su ~/.bashrc :

if [ -d ~/.bash_functions ]; then
    for file in ~/.bash_functions/*; do
        . "$file"
    done
fi

Un guión debe valerse por sí mismo. Debe tener valor como algo que se puede reutilizar o usar para más de un propósito.


Linux
  1. ¿Qué significa Env X=() { ::}; Command' Bash Do y por qué es inseguro?

  2. ¿Cómo agregar nuevas líneas en variables en Bash Script?

  3. ¿Cómo establecer parámetros cuando Pipe Bash Script to Bash?

  4. ¿Cómo llamar a una función Bash en Bash Script dentro de Awk?

  5. Bash script para eliminar todos los archivos excepto N cuando se ordenan alfabéticamente

Use este útil script de Bash cuando observe las estrellas

Cómo escribir un script Bash con ejemplos

Tutorial de scripts de Bash para principiantes:qué es, cómo escribir uno y ejemplos de scripts

Funciones bash

Bash Scripting Part6 - Crear y usar funciones de Bash

¿Cómo escribir un script bash o automatizar el vi abierto y editar el documento?