Estoy usando una ubicación central para mi bashrc y la obtengo para todos mis usuarios de esta manera:
GLOBAL_BASHRC="/path/to/global/bashrc"
if [ -r "$GLOBAL_BASHRC" -a -f "$GLOBAL_BASHRC" ]; then
# Load the bashrc
source $GLOBAL_BASHRC
else
echo "Warning: Bashrc file [${GLOBAL_BASHRC}] does not exist!"
fi
Y ahora quiero hacer lo mismo con mi archivo inputrc. Ya descubrí cómo hacer el equivalente a la fuente en inputrc desdeesta pregunta:
$include /path/to/global/inputrc
Pero la cuestión es que, como en el bashrc anterior, quiero manejar algunos errores, solo quiero cargar el archivo si realmente existe. Por lo tanto, mi pregunta es, ¿cómo especifico una declaración if que verifique si existe un archivo en mi inputrc?
Respuesta1
No es necesario hacerlo $include
desde su sitio, ~/.inputrc
ya que puede leer un archivo inputrc en cualquier momento con
bind -f /path/to/global/inputrc
así que usa tu habitual if [ -r file ]
con esto en lugar de source
.
La página de manual dice que para un shell de inicio de sesión interactivo lee /etc/profile
y se encuentra por primera vez de ~/.bash_profile
, ~/.bash_login
y ~/.profile
. Para otros shells interactivos lee ~/.bashrc
y para los no interactivos lee el archivo, $BASH_ENV
si lo hay.
En su caso, presumiblemente está utilizando un shell interactivo sin inicio de sesión para un emulador de terminal, así ~/.bashrc
se lee. Puedes ver lo que sucede usando strace
y una casa ficticia, por ejemplo, en /tmp
.
$ touch /tmp/.inputrc /tmp/.bashrc
$ (unset BASH_ENV INPUTRC HISTFILE
HOME=/tmp strace -e open -o /tmp/out bash -i)
Esto muestra que se abren los siguientes archivos (he eliminado algunos por brevedad):
open("/tmp/.bashrc", O_RDONLY) = 3
open("/tmp/.bash_history", O_RDONLY) = -1 ENOENT
open("/tmp/.inputrc", O_RDONLY) = 3
open("/tmp/.bash_history", O_WRONLY|O_CREAT|O_TRUNC, 0600) = 3
Entonces bash leerá .inputrc
después .bashrc
. Esto tiene sentido ya que le da tiempo para configurar INPUTRC
su archivo.
Respuesta2
En lugar de hacer esto en el .inputrc
archivo (que no tiene ninguna función para verificar que el archivo realmente exista AFAIK), puede configurar la INPUTRC
variable de entorno en su .bashrc
archivo:
if [ -r "$GLOBAL_BASHRC" -a -f "$GLOBAL_BASHRC" ]; then
# Load the bashrc
source $GLOBAL_BASHRC
if [ -f /path/to/global/inputrc ]; then
export INPUTRC="/path/to/global/inputrc"
fi
else
echo "Warning: Bashrc file [${GLOBAL_BASHRC}] does not exist!"
fi
La INPUTRC
variable está documentada en el readline
manual (y en el bash
manual también).