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

Tentando entender este trecho de código:

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

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

Resposta

A página de manual relevante para verificar isso é a do próprio shell, bash, porque -f é a funcionalidade que o shell oferece, é um bash integrado.

No meu sistema (CentOS 7), a bela página de manual 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 “-f”, ele deverá fornecer os resultados de que você precisa.

$ man bash | grep -A1 "\-f file$" -f file True if file exists and is a regular file. $ 

/ div>

Resposta

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

no script de shell avalia o status de saída dos comandos – 0 em caso de sucesso. Portanto, é 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 comando test. Portanto, seria perfeitamente válido fazer

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

O -f flag verifica duas coisas: o caminho fornecido existe e é um arquivo normal. 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 a falha

Este comando originalmente era um comando separado, que não é parte dos comandos embutidos do shell. Hoje em dia, a maioria dos shells do tipo Bourne o têm como embutido, e é isso que o shell usará.

Em uma observação lateral, o /etc/bashrc parece um arquivo extra desnecessário que seu administrador ou autor original do trecho de código está usando. Existe /etc/bash.bashrc, que se destina a ser um arquivo rc de todo o sistema para bash, portanto, seria de se esperar que fosse usado.

Veja também:

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *