Многие легковесные образы Docker, особенно созданные на основе Alpine Linux, не содержат GNU Bash.
Лучшее решение здесь - переписать сценарий, чтобы он не требовал специально использовать bash.Измените его строку shebang на #!/bin/sh
и ограничьте его синтаксис тем, что разрешено в спецификации POSIX .Этого более чем достаточно для большинства простых сценариев в стиле «do A, B, C, а затем D»;если вам нужны такие специфичные для bash функции, как массивы, рассмотрите более мощный язык сценариев, такой как Python.
В частности, в одной строке
sh 'export PATH=/bin/bash:$PATH'
- Каждая команда
sh
выполняется в собственной среде выполнения с чистой средой, поэтому настройки переменных среды из более раннего оператора sh
не влияют на более поздний;этот оператор недопустим. - Элементы
$PATH
являются каталогами, а не отдельными файлами. /bin
требуется только для включения в $PATH
и во всехстандартные среды исполнения.(Если существует /bin/bash
, то его найдут явные команды bash -c '...'
и строки #!/bin/bash
shebang.)
(Другая частая причина таких проблем - смешанные среды Windows / Linux, гдефактическая строка shebang заканчивается двухсимвольной новой строкой CR / LF в стиле DOS, и среда не может запускаться /bin/bash\r
.)