“set -e -o pipefail” não funciona no script bash no Ubuntu 16

4

Eu tenho tentado executar no Ubuntu 16 um script bash que desenvolvi no CentOS 7.

A primeira linha do script é:

set -o nounset -o pipefail -o errexit

Quando tento executar esse script, recebo o seguinte erro:

project.sh: 6: set: Illegal option -o pipefail

Como resolver esse problema? Eu também a solução explicar na resposta a esta pergunta mas não ajudou (meu arquivo não é um make ).

    
por DavideChicco.it 23.02.2017 / 16:04

1 resposta

6

No Ubuntu, o shell padrão é dash (também conhecido como Debian Almquist Shell), para o qual /bin/sh é symlink. Quando seu script de shell é executado com #!/bin/sh , você está efetivamente tentando executá-lo com o shell padrão. No entanto, dash não tem a opção pipefail , e é por isso que você está recebendo o erro.

# Verifying what /bin/sh is symlinked to
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 2月  17  2016 /bin/sh -> dash
# Verify that pipefail doesn't exist as option for dash
$ dash    
$ set -o | grep pipefail                                              
$ set -o pipefail
dash: 1: set: Illegal option -o pipefail
$ sh
$ set -o pipefail
sh: 1: set: Illegal option -o pipefail
$ bash --posix
bash-4.3$ set -o pipefail
bash-4.3$  
    
por Sergiy Kolodyazhnyy 23.02.2017 / 16:11