A expansão do nome do arquivo que não corresponde a nenhum arquivo faz com que um script saia com 1?

0

Do manual de bash, para expansão de nome de arquivo:

If the nullglob option is set, and no matches are found, the word is removed.

Meu script a seguir retornará o status de saída 1.

  • A expansão de nome de arquivo pode falhar ao combinar qualquer arquivo jpg no meu diretório atual, fazendo com que meu script saia com 1?

  • Como posso descartar outra possibilidade de status de saída 1?

Obrigado.

shopt -s nullglob

for i in *.{png,jpg};
do
    filename=${i##*/}
    basename=${filename%.*}
    [ ! -e ${basename}.pdf ] && convert  "$i"  ${basename}.pdf ;
done
    
por Tim 26.09.2017 / 13:29

1 resposta

1

Não, configurar a opção nullglob shell e falhar ao expandir um padrão glob não fará com que o script saia com um status de saída diferente de zero (e os nomes de arquivos correspondentes com padrões globais em geral não alteram o $? shell variável).

Não , a definição nullglob fará com que convert falhe (a menos que existam arquivos com os nomes literais *.jpg e *.png no diretório atual) e sairá com uma saída status de 1.

Como este é o último comando executado no script, o script sairá com este status de saída.

Após a atualização do script em questão:

O script agora sai com um status de saída diferente de zero se existir um arquivo PDF para o último arquivo de imagem processado, devido ao [ ! -e ... ] test (este é o último comando executado no script nesse caso).

Se isso não for desejado, use

[ ! -e "${basename}.pdf" ] && convert "$i" "${basename}.pdf" || true

(observe também as citações adicionadas)

    
por 26.09.2017 / 13:38

Tags