“набор-e-o pipefail” не работающий над сценарием удара на Ubuntu 16

Я пытался работать на Ubuntu 16 сценарий удара, который я разработал на CentOS 7.

Первая строка сценария:

set -o nounset -o pipefail -o errexit

Когда я пытаюсь запустить этот скрипт, я получаю следующую ошибку:

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

Как решить эту проблему? Я также решение объясняет в ответе на этот вопрос, но это не помогло (мой файл не является a make).

6
задан 13 April 2017 в 05:24

2 ответа

На Ubuntu оболочка по умолчанию dash (иначе Debian Almquist Shell), на который /bin/sh символьная ссылка. Когда Ваш сценарий оболочки выполняется с #!/bin/sh, Вы эффективно пытаетесь выполнить его с оболочкой по умолчанию. Однако dash не имеет pipefail опция, которая является, почему Вы получаете ошибку.

# Verifying what /bin/sh is symlinked to dash
$ 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
# Try this same option in bash
$ bash --posix
bash-4.3$ set -o pipefail
bash-4.3$  
# no error
11
ответ дан 23 November 2019 в 07:28

Для тех, кто ищет простой сценарий, позволяющий обойти проблему тире в Ubuntu, вы можете использовать

bash | set +o pipefail
0
ответ дан 3 December 2019 в 10:09

Другие вопросы по тегам:

Похожие вопросы: