Alias ​​de Bash que llama a un script en lugar de definir el script como una función

Alias ​​de Bash que llama a un script en lugar de definir el script como una función

Tengo más de 150 atajos definidos en mi archivo .bash_aliases. Algunos de ellos son comandos simples, por ejemplo:

# Opens file with default program
o () { xdg-open "$@" & disown; }

# Folder shortcuts
alias ..='cd .. && ls'

Otros llaman a un script que tengo en otro lugar de la máquina, como por ejemplo:

alias i3exit='~/.config/i3/i3exit.sh'

Y otros son scripts más grandes definidos como el ocomando anterior, solo que con 30-80 líneas.

¿Cuál es la diferencia entre un script definido directamente como una función bash y un alias que llama a un script desde un archivo diferente? ¿Es preferible uno sobre el otro y, de ser así, por qué?

La intuición me dice que sería mejor tener archivos de script separados, pero no tengo ningún argumento para ello.

Respuesta1

Si los define en su ~/.bash_aliasesarchivo, que es algo específico de Ubuntu y se obtiene ~/.bashrcen una instalación predeterminada de Ubuntu, entonces sí, hay una sobrecarga ya que el archivo se obtendrá cada vez que inicie un nuevo shell interactivo sin inicio de sesión. . Así, cada vez que abres una nueva ventana de terminal, por ejemplo. Ahora, con las máquinas modernas, esta sobrecarga probablemente será indetectable, pero puede ser un problema para máquinas más antiguas, sistemas integrados o si comienza a tenercargasde funciones complejas definidas.

Además, las funciones y alias definidos de esta manera no son accesibles para los scripts de forma predeterminada. Entonces, si desea utilizar una de esas funciones en sus scripts, deberá obtener .bashrc(o .bash_aliases) explícitamente. Si los tiene como archivos de script externos en su archivo $PATH, no será necesario.

Mi regla general personal se reduce a la complejidad de los comandos involucrados y a si la función/script que estoy escribiendo es probable que sea útil para shells no interactivos (por ejemplo, otros scripts). Si me encuentro escribiendo varias docenas de líneas de código, probablemente lo pasaré a un script. Si estoy escribiendo algo que puede usarse en muchos contextos diferentes y que probablemente pueda resultar útil al escribir otro guión, entonces, nuevamente, lo trasladaré a un guión.

Sin embargo, si solo quiero una pequeña función simple como la que muestra en su pregunta, que solo es realmente útil cuando se ejecuta de forma interactiva, entonces me limitaré a las funciones. Por lo tanto, realmente es una cuestión de preferencia personal y de considerar cómo y cuándo querrá utilizar las funciones que está definiendo.

información relacionada