Мені потрібно виконати ряд команд з оболонковою оболонкою із не-BASH-сценарію (а саме PHP-скрипту), таких як:
command1 | command2 | command3
так що, якщо command1
не працює з ненульовим кодом виходу, то і інша команда виходить з ладу. Поки що я придумав:
set -o pipefail && command1 | command2 | command3
Але навіть якщо він працює з терміналу, він створює це, якщо виконується зі сценарію:
sh: 1: set: Неправомірний варіант -o pipefail
/bin/sh set -o pipefail
це говорить /bin/sh: 0: Can't open set
(те ж саме з sudo
). Сподіваюся, я перевірив це правильно. Система - Ubuntu 12.
/bin/sh -c "set -o pipefail"
; як це було, оболонка намагалася виконати скрипт у поточному каталозі, який називається, set
і його не знайшли.
/bin/sh -c "set -o pipefail"
, однак, bash -c "set -o pipefail"
не працює.
/bin/sh
який не розпізнає set -o pipefail
. Отже, вам потрібно буде переконатися, що сценарій виконується /bin/bash
замість /bin/sh
. Або, якщо ви впевнені, сміливі - і, ймовірно, нерозумні - зміните, /bin/sh
щоб бути посиланням на або копією, /bin/bash
замість того, до якої оболонки вона пов’язана чи копія. Якщо ви впевнені, що /bin/sh
це так bash
, ви використовуєте поведінку, яка bash
не піддається, коли запускається як /bin/sh
; використовувати bash
як bash
.
/bin/sh
це не подобаєтьсяset -o pipefail
. Це насправдіbash
маскується, чи це інша оболонка? Колиbash
запускається як/bin/sh
, чи приймає цеset -o pipefail
?