Se declaração em inputrc

3

Estou usando um local central para o meu bashrc e apresento isso para todos os meus usuários assim:

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

E agora eu quero fazer o mesmo para o meu arquivo inputrc. Eu já descobri como fazer o equivalente a fonte em inputrc de esta questão :

$include /path/to/global/inputrc

Mas a questão é que, como no bashrc acima, eu quero algum tratamento de erros, eu só quero carregar o arquivo se ele realmente existe. Portanto, minha pergunta é, como eu especifico uma declaração if verificando se existe um arquivo no meu inputrc?

    
por yzfr1 21.06.2016 / 15:37

2 respostas

2

Você não precisa $include do seu ~/.inputrc , pois pode ler um arquivo inputrc a qualquer momento com

bind -f /path/to/global/inputrc

use o seu usual if [ -r file ] com isso em vez de source .

A página man de um shell de login interativo diz /etc/profile e o primeiro encontrado de ~/.bash_profile , ~/.bash_login e ~/.profile . Para outros shells interativos, ele lê ~/.bashrc e, para não-interativo, lê o arquivo $BASH_ENV , se houver.

No seu caso, presumivelmente, você está usando um shell interativo sem logon para um emulador de terminal, portanto ~/.bashrc é lido. Você pode ver o que acontece usando strace e uma casa fictícia, por exemplo, em /tmp .

$ touch /tmp/.inputrc /tmp/.bashrc
$ (unset BASH_ENV INPUTRC HISTFILE
   HOME=/tmp strace -e open -o /tmp/out bash -i)

Isso mostra os seguintes arquivos sendo abertos (removi alguns por brevidade):

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

Então o bash lerá .inputrc após .bashrc . Isso faz sentido, pois dá tempo para você definir INPUTRC no seu arquivo.

    
por 21.06.2016 / 17:10
2

Em vez de fazer isso no arquivo .inputrc (que não tem nenhum recurso para verificar se o arquivo realmente existe AFAIK), você pode definir a variável de ambiente INPUTRC em seu arquivo .bashrc :

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

A variável INPUTRC está documentada no manual readline (e no manual bash também).

    
por 21.06.2016 / 15:47