O que significa -f em uma instrução if em um script bash?

2

Tentando entender este trecho de código:

if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi

Não tenho certeza do que o -f significa exatamente.

    
por Eric Hodgins 04.07.2018 / 23:56

2 respostas

6

A página man relevante para verificar isso é a do próprio shell, bash , porque -f é a funcionalidade que o shell fornece, é um bash embutido.

No meu sistema (CentOS 7), a boa página man cobre isso. O grep pode não dar os mesmos resultados em outras distribuições. No entanto, se você executar man bash e, em seguida, pesquisar por '-f', deverá fornecer os resultados desejados.

$ man bash | grep -A1 '\-f file$'
       -f file
              True if file exists and is a regular file.
$
    
por 05.07.2018 / 00:11
7

Em suma, o trecho de código irá fornecer o arquivo /etc/bashrc , se existir, e a existência será verificada pelo comando [ para o qual -f é um operador / parâmetro.

A declaração

if...then...else...fi no shell script avalia o status de saída dos comandos - 0 em sucesso. Então, é apropriado fazer algo assim:

if ping -c 4 google.com; then
    echo "We have a connection!"
fi

O comando, no seu caso, é [ , que também é conhecido como test . Então seria perfeitamente válido fazer

if test -f /etc/bashrc; then
    . /etc/bashrc
fi

O sinalizador -f verifica duas coisas: o caminho fornecido existe e é um arquivo regular. Se /etc/bashrc for de fato um diretório ou ausente, o teste deve retornar um status de saída diferente de zero para sinalizar falha

Este comando originalmente era um comando separado, que não faz parte dos comandos internos do shell. Hoje em dia, a maioria dos shells parecidos com o Bourne têm o mesmo built-in, e é isso que o shell irá usar.

Em uma nota lateral, o /etc/bashrc parece um arquivo extra desnecessário que seu administrador ou autor original do snippet de código está usando. Existe /etc/bash.bashrc , que é planejado como um arquivo rc de todo o sistema para o bash, então seria de se esperar que fosse usado.

Veja também:

por 05.07.2018 / 01:18