Cómo usar un directorio .bashrc.d para no «ensuciar» nuestro .bashrc

En los sistemas operativos GNU/Linux, el fichero ~/.basrhrc es un script de bash que se ejecuta cada vez que hacemos login en un terminal, y en él podemos encontrar las configuraciones que se aplican cada vez que iniciamos una sesión.

Es habitual escribir en él todo aquello que queremos añadir ya sea por gusto personal o para incluir una configuración que necesitemos o necesite un programa para ejecutarse, por lo que, si no somos muy cuidadosos, al final podemos llegar a tener un script .bashrc bastante «sucio» y desorganizado.

Otra cosa a tener en cuenta es que si hacemos una reinstalación de nuestro sistema, perderemos todas esas modificaciones, salvo que previamente las hayamos extraído y respaldado en un fichero aparte, algo que puede resultar engorroso si dichas modificaciones las tenemos esparcidas por todo el script.

Para evitar esto podemos hacer uso de un directorio .bashrc.d. Si miramos en el .bashrc que se crea por defecto en Fedora 39, veremos que tiene las siguientes líneas:

# User specific aliases and functions
if [ -d ~/.bashrc.d ]; then
for rc in ~/.bashrc.d/*.bashrc; do
if [ -f "$rc" ]; then
. "$rc"
fi
done
fi

Este código hace que se ejecuten todos los script que tengamos en el directorio .bashrc.d con extensión «bashrc», por lo que podemos incluir ahí todas nuestras modificaciones del perfil en scripts separados, de forma que podamos localizarlas rápidamente, así como respaldarlas, pues solo tendremos que copiar a un medio externo nuestro directorio .basrdc.d

Pongamos un ejemplo: yo suelo usar el alias «la» para ejecutar el comando «ls -la» pero no suele venir por defecto en Fedora. Para incluirlo en mi configuración primero creo el directorio «.bashrc.d»

mkdir ~/.bashrc.d

A continuación creo en él un fichero «01_alias.bashrc» con la línea

alias la="ls -la"

Si ejecuto en este momento la lista de alias que tengo en mi sistema con «alias -p» no aparecerá listado.

Si cierro el terminal y lo vuelvo a abrir, puedo comprobar que ahora ya sí que me aparece.

De la misma manera podemos crearnos por ejemplo un script ~/bashrc.d/10_python.bashrc con la línea

export PIP_REQUIRE_VIRTUALENV=TRUE

Y de la misma forma para cualquier otra configuración que necesitemos.

¿No funciona chmod -R?

Cuando alguna vez hemos tenido que cambiar los permisos a los ficheros de una carpeta y de las subcarpetas incluidas de forma recursiva, hemos usado por ejemplo el comando chmod -R 755 y ha funcionado perfectamente. Sin embargo, si tratamos de hacer los mismo seleccionando a qué tipo de ficheros queremos hacer el cambio con el comando chmod -R 755 *.php nos encontramos con que no funciona, que el comando no nos da error, pero solo cambia los ficheros de la carpeta actual, no lo hace sobre los ficheros con esa extensión incluidos en carpetas dentro del directorio.
Realmente no es un error, simplemente funciona así, pero como para todo hay arreglo, la forma de conseguir lo que queremos es combinando los comando find y chmod de la forma siguiente:
find . -type f -name '*.php' -exec chmod 755 {} \;
Con este comando buscamos (find) en el directorio actual (el .) todos los ficheros (-type f) que tienen extensión php (‘*.php’), y la lista recuperada la dirigimos (-exec) hacia el comando chmod, que la recibe en {}. El \; final solamente es para indicar que se acaba la orden.
Parece un comando complicado, pero cuando entiendes qué hace cada cosa resulta más fácil de recordar.
En esta entrada hay un ejemplo algo más complicado, que sirve para cuando queremos cambiar los permisos solamente a aquellos ficheros que tienen ya unos permisos determinados, por ejemplo cambiar al permiso 755 a aquellos ficheros que en ese momento tienen permisos 777.