Разрешить некоторым кодам выхода не прерывать выполнение в bash & ldquo; -e & rdquo; Режим

Если umount возвращает 0 в качестве кода выхода, этот сценарий продолжается. Несколько раз код выхода - 127, я в порядке, и сценарий должен продолжаться. Как изменить скрипт для выполнения такого «белого списка» допустимых кодов выхода umount?

set -e sudo umount /drive || [ $? -eq 0 ] echo do stuff

Если такая методика существует, у меня есть много вариантов использования.

1
задан 17 January 2018 в 05:00

6 ответов

Этот ответ в комментарии от glenn jackman работает для меня:

mycmd || [ $? -eq 127 ] || exit
-1
ответ дан 17 July 2018 в 22:52

Попробуем это:

if sudo mount /drive; then : # exit status 0 else rc=$? [ $rc -ne 127 ] && exit $rc fi

Протестируйте это - эксперимент с разными значениями для status

env status=0 bash -e -c ' mycmd() { return $1; } if mycmd $status; then : else rc=$? [ $rc -ne 127 ] && exit $rc fi echo OK '
1
ответ дан 17 July 2018 в 22:52

Вы можете использовать оператор case для белого списка или выполнить другое действие.

sudo umount /drive case $? in 0) ;; 127) ;; *) echo 'bailing!' exit 1 ;; esac echo 'doing more stuff'
1
ответ дан 17 July 2018 в 22:52

Этот ответ в комментарии от glenn jackman работает для меня:

mycmd || [ $? -eq 127 ] || exit
-1
ответ дан 24 July 2018 в 13:28
  • 1
    Пожалуйста, не публикуйте «Благодарю вас». или что-то подобное, как ответ. Удалите это сообщение и вместо этого отметьте в соответствии с ответом как принятый. – derHugo 17 January 2018 в 19:36
  • 2
    но это комментарий, ответ был дан как комментарий – american-ninja-warrior 17 January 2018 в 20:10
  • 3
    @derHugo: Я думаю, что в этом случае это приемлемо, поскольку нет ответа answer , на который это ссылается, только комментарий. Я предпочел бы, чтобы он был воспринят в правильном ответе и прошел обычную систему голосов, проверок и критики, чем оригинальный непроверенный комментарий. – David Foerster 17 January 2018 в 20:37
  • 4
    @David Foerster Я бы предпочел спросить пользователя, который отправил ответ, на который был добавлен комментарий, отредактировать его ответ и добавить решение с одним вкладышем к его ответу, поскольку на самом деле это была его идея & quot; – derHugo 17 January 2018 в 20:41
  • 5
    @derHugo: Если это произойдет, я с радостью буду отмечать этот ответ как дубликат. На данный момент я предпочел бы остаться, чем идти. – David Foerster 17 January 2018 в 20:42

Попробуем это:

if sudo mount /drive; then : # exit status 0 else rc=$? [ $rc -ne 127 ] && exit $rc fi

Протестируйте это - эксперимент с разными значениями для status

env status=0 bash -e -c ' mycmd() { return $1; } if mycmd $status; then : else rc=$? [ $rc -ne 127 ] && exit $rc fi echo OK '
1
ответ дан 24 July 2018 в 13:28
  • 1
    есть ли более краткий один лайнер, возможно ... – american-ninja-warrior 17 January 2018 в 16:27
  • 2
    Непроверенный mycmd || [ $? -eq 127 ] || exit – glenn jackman 17 January 2018 в 17:01
  • 3
    OP проверил его, поэтому вы можете добавить комментарий к ответу. – muru 17 January 2018 в 21:03

Вы можете использовать оператор case для белого списка или выполнить другое действие.

sudo umount /drive case $? in 0) ;; 127) ;; *) echo 'bailing!' exit 1 ;; esac echo 'doing more stuff'
1
ответ дан 24 July 2018 в 13:28
  • 1
    есть ли более краткий один лайнер, возможно ... – american-ninja-warrior 17 January 2018 в 16:27

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

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