erro para falta de suporte sem motivo aparente

1

Estou escrevendo uma função bash para verificar se um determinado arquivo de entrada é legível, regular e não um link simbólico, mas estou recebendo um erro de suporte ausente.

function vfile(){
local infile=$1;
if [ ! $1 ]; then
        getname;
else
        getname $1;
fi;
if [ $? == 1 ]; then
        return;
else
infile=$fname;
fi;
if [ -f $infile && -r $infile ];
then
        if [ ! -h $infile ];
        then
                echo "$infile";
                (exit 0)
                return;
        else
                echo "$infile";
                (exit 1)
                return;
        fi;
else
        (exit 2)
        return;
fi
}

Estou recebendo o erro na linha 37, o que é estranho para mim porque a instrução if possui espaçamento adequado, o que parece causar esses erros, então o que estou fazendo errado?

    
por mike 17.11.2017 / 03:12

1 resposta

2

&& não é suportado dentro de [...] . Substitua:

if [ -f $infile && -r $infile ]

Com:

if [ -f "$infile" ] && [ -r "$infile" ]

Observe também que suas variáveis devem estar entre aspas duplas para evitar a divisão de palavras e a expansão do nome do caminho.

Aparte

Para melhor compatibilidade, substitua:

function vfile(){

com

vfile(){

Este novo formulário funcionará em todos os shells do POSIX. A palavra-chave function é específica do bash e não adiciona valor.

    
por 17.11.2017 / 03:18

Tags