Si declaración en inputrc

Si declaración en inputrc

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 $includedesde su sitio, ~/.inputrcya 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_loginy ~/.profile. Para otros shells interactivos lee ~/.bashrcy para los no interactivos lee el archivo, $BASH_ENVsi lo hay.

En su caso, presumiblemente está utilizando un shell interactivo sin inicio de sesión para un emulador de terminal, así ~/.bashrcse lee. Puedes ver lo que sucede usando stracey 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á .inputrcdespués .bashrc. Esto tiene sentido ya que le da tiempo para configurar INPUTRCsu archivo.

Respuesta2

En lugar de hacer esto en el .inputrcarchivo (que no tiene ninguna función para verificar que el archivo realmente exista AFAIK), puede configurar la INPUTRCvariable de entorno en su .bashrcarchivo:

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 INPUTRCvariable está documentada en el readlinemanual (y en el bashmanual también).

información relacionada