Los alias de bash deben ir en los archivos .bash_aliases
o .bashrc
en directorios de inicio individuales. Si debe crear alias bash globales, pueden entrar /etc/bash.bashrc
, pero a menudo es mejor simplemente agregarlos a los archivos .bash_aliases
o para que sean heredados por los usuarios recién creados..bashrc
/etc/skel
Es casi siempre malo para definir un alias en en .profile
, .bash_profile
o /etc/profile
.
Para entender por qué, uno debe entender bajo qué circunstancias se ejecutan los comandos de cada uno de estos archivos . Hay ideas erróneas sobre esto, que abordo a continuación.
Aunque desee definir alias para varios usuarios, debe estar familiarizado con cómo se definen para usuarios individuales, de modo que pueda decidir el mejor método para hacer lo que necesita.
Alias para usuarios individuales
Especialmente si usa una GUI, la mayoría de sus shells interactivos son probablemente shells sin inicio de sesión . Incluso si nunca usa una GUI, probablemente todavía use shells sin inicio de sesión con cierta frecuencia. Querrás que tus alias funcionen en estos shells.
Especialmente si alguna vez inicia sesión de forma no gráfica en una consola virtual o mediante SSH , es probable que use shells de inicio de sesión algunas veces. Por lo tanto, también querrá que sus alias funcionen en shells de inicio de sesión interactivos.
Cuando se inicia un shell interactivo sin inicio de sesión , se origina .bashrc
en el directorio de inicio del usuario. Por defecto en Ubuntu, cada usuario .bashrc
se abastece .bash_aliases
, si existe.
- Para fuente de un archivo es hacer que su contenido se ejecuten en el actual shell. Los cambios en el entorno de shell realizados en un archivo que se obtiene persisten incluso después de que se hayan ejecutado todos los comandos del archivo.
La lectura de los comentarios en el valor predeterminado de Ubuntu .bashrc
revela que oficialmente se pretende que los alias entren .bashrc
o .bash_aliases
. .bashrc
ya contiene algunas definiciones de alias (ejecutar grep '^[[:blank:]]*alias' ~/.bashrc
para verlas) y brinda consejos explícitos sobre dónde colocar nuevas definiciones de este tipo:
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
¿Pero qué pasa con los shells de inicio de sesión interactivos ? En lugar de .bashrc
, iniciar sesión fuente de shells .profile
.
- ... A menos que
.bash_login
exista, entonces se obtiene en su lugar.
- ... A menos que
.bash_profile
exista, entonces se obtiene en su lugar.
Sin embargo, la buena noticia es que por defecto en Ubuntu, los comandos en .bashrc
serán también se ejecutan en shells de entrada interactivos debido a las predeterminadas .profile
comprueba si el shell actual es bash (y si .bashrc
existe), y si es así, las fuentes .bashrc
:
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Sugiero que los usuarios definan nuevos alias bash .bash_aliases
en sus directorios de inicio (creándolo si aún no existe). Esta es una forma particularmente limpia y simple de hacer que las definiciones de alias sean permanentes en el nivel por usuario.
Los alias no deben definirse.profile
porque permanecerían indefinidos en shells sin inicio de sesión. A diferencia de gran parte del entorno de un bash shell, los alias no se exportan a los shells secundarios:
ek@Io:~$ alias hi='echo "Greetings, $USER!"'
ek@Io:~$ hi
Greetings, ek!
ek@Io:~$ bash
ek@Io:~$ hi
hi: command not found
En particular, de manera predeterminada, la mayoría de los entornos de escritorio .profile
se originan en el inicio de sesión gráfico, pero:
- Esto no se hace necesariamente por un shell bash, por lo que las definiciones de alias ni siquiera se pueden procesar, y lo que es más importante
- incluso si se procesan las definiciones de alias, no se pasan a procesos secundarios . En particular, no se transmiten a los depósitos creados al abrir una ventana de Terminal.
Los alias no deben definirse en .bash_profile
(o .bash_login
) por la misma razón, sino también por otra razón. ¡Crear ingenuamente uno de estos archivos y poner solo definiciones de alias evita que se .profile
ejecute cualquiera de los códigos !
En situaciones en las que .bash_profile
o .bash_login
realmente es útil, generalmente uno se .profile
encuentra en algún lugar de ellas, lo que resuelve ese problema. (Entonces, el único problema que queda es que, al igual que con .profile
, definir alias en .bash_profile
o .bash_login
no funciona correctamente).
Alias para nuevos usuarios individuales, automáticamente
Cuando se crea una cuenta de usuario del tipo destinado a representar a un ser humano real, generalmente se crea un nuevo directorio para que sirva como su directorio de inicio. El contenido de /etc/skel
se copia a su directorio de inicio. Así es como varios usuarios comienzan con algunos archivos de configuración similares en sus directorios de inicio. En Ubuntu, esto incluye .profile
, .bashrc
y algunos otros archivos.
Para cambiar qué alias se definen para los nuevos usuarios, simplemente puede ponerlos /etc/skel/.bash_aliases
(tendrá que crearlos) o /etc/skel/.bashrc
.
Si edita un archivo ya existente, /etc/skel
es posible que desee hacer una copia de seguridad primero, pero no debe colocar la copia de seguridad /etc/skel
, o también se copiará en los directorios principales de los nuevos usuarios.
Esta es probablemente la mejor forma de agregar nuevos alias para múltiples usuarios. Los usuarios existentes pueden simplemente agregar los alias ellos mismos. Si define los alias en /etc/skel/.bash_aliases
, simplemente puede dirigirlos a ese archivo, que pueden elegir copiar en sus directorios de inicio (o agregar a su propio .bash_aliases
archivo personalizado ).
Es trivial que un usuario defina un alias. Además, los alias no son extremadamente robustos ; funcionan solo en circunstancias particulares. Si necesita crear un nuevo comando que funcione todo el tiempo, para todos , no debe implementar ese comando como un alias. Y no puede forzar con éxito los alias a los usuarios que no los quieren, simplemente pueden unalias
usarlos.
Alias globales, para todos los usuarios
Aunque le aconsejo que evite este enfoque, puede definir alias en el archivo global /etc/bash.bashrc
. Luego se definirán tanto para shells interactivos sin inicio de sesión como para shells interactivos de inicio de sesión. El motivo es que, antes de que se obtenga cualquiera de los archivos del directorio de inicio del usuario:
- Los shells de inicio de sesión (y solo los shells de inicio de sesión y otros procesos que se comportan como shells de inicio de sesión) ejecutan comandos
/etc/profile
automáticamente.
- Solo los shells sin inicio de sesión ejecutan comandos
/etc/bash.bashrc
automáticamente, pero
- El valor predeterminado de Ubuntu
/etc/profile
verifica si el shell en ejecución es bash (y si /etc/bash.bashrc
existe) y, de ser así, las fuentes /etc/bash.bashrc
.
Esto es análogo a cómo el usuario predeterminado obtiene el usuario .profile
por usuario .bashrc
si el shell es bash (como se detalla anteriormente).
Así es como se ve el código real para esto en el valor predeterminado /etc/profile
:
if [ "$PS1" ]; then
if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1='\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
Ese bloque también realiza otras tareas. Específicamente, el externo if
verifica si es probable que el shell sea interactivo (verificando que el texto de solicitud no esté vacío), luego verifica si el shell actual es bash y fuentes /etc/bash.bashrc
si lo es, y si no funciona, para bash , ya está hecho en /etc/bash.bashrc
.
Usted debe no definir alias globales en /etc/profile
los mismos usuarios razón no les deben definir en sus locales .profile
s: si lo hace, que se definirán sólo para shells de entrada, y no por sus conchas niño.
Finalmente, tenga en cuenta que, a diferencia del predeterminado por usuario .bashrc
, el /etc/bash.bashrc
archivo predeterminado no contiene nada sobre alias. Es algo inusual dar a los usuarios alias en un archivo donde no pueden editarlos o deshabilitarlos. (Por supuesto, todavía pueden hacer eso, anulando sus definiciones en su propio local de .bashrc
, .bash_aliases
o en otro lugar).
Otras lecturas