Я пытался скомпилировать некоторые пакеты ocaml и продолжаю сталкиваться с ошибками вида sh: 1: Bad substitution
(код выхода 2), например.
/bin/sh -exc echo | m4
/bin/sh: 1: Bad substitution
Но, /bin/sh -ec echo | m4
не имеет ошибки. Кажется, что любая команда с флагами -e
и -x
, переданными в /bin/sh
(/ bin / sh: символическая ссылка на тире), приводит к этой ошибке. Это ожидаемое поведение, потому что я не вижу ничего подобного в руководстве, и я не могу вспомнить, чтобы это когда-либо происходило раньше.
РЕДАКТИРОВАТЬ: на самом деле я вижу ошибку с любой командой /bin/sh -xc
, независимо от -e
Ubuntu 18.04
Я наконец нашел проблему. В моем ~/.bashrc я установил
export PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }'
Который, как в руководстве тире говорится, производится перед каждой соединительной линией когда -x
установлен. Экспорт PS4
без bashisms решает проблему.
Я не ожидал мой ~/.bashrc
быть считанным вообще в этом случае, но с тех пор bash
используется для выполнения /bin/sh
Я предполагаю, что те переменные замечаются dash
также, раздражающе.