/ bin / sh: ошибка импорта определения функции для `some-function '

14

Я столкнулся с этой ошибкой при обновлении bash для проблемы безопасности CVE-2014-6271:

# yum update bash
Running transaction (shutdown inhibited)
Updating   : bash-4.2.47-4.fc20.x86_64
/bin/sh: error importing function definition for `some-function'
D МакКеон
источник

Ответы:

17

[отредактировано после 1-го комментария от: @chepner - спасибо!]

/ bin / bash позволяет использовать дефисы в именах функций, а / bin / sh (оболочка Bourne) - нет. Здесь нарушающая «some-function» была экспортирована bash, и bash вызвал yum, который вызвал / bin / sh, который сообщил об ошибке выше.

исправлено: переименование функций оболочки, чтобы не было дефисов

man bash говорит, что идентификаторы bash могут состоять из «только буквенно-цифровых символов и символов подчеркивания»

Ошибка / bin / sh гораздо более явная:

some-function () { :; }

sh: `some-function ': недопустимый идентификатор

D МакКеон
источник
Обратите внимание, что bashдефис разрешен в имени функции, но не в имени параметра.
Чепнер
@chepner Как насчет подчеркивания? Разрешено ли подчеркивание в имени функции и имени параметра?
BH2017
В моей системе bash 4 позволяет именам функций иметь дефисы, а bash 3 нет - я предполагаю, что в системе OP / bin / sh - это bash 3, а / bin / bash - это bash 4
Марк Фокс
2

Изменить / исправить имя функции с "foo-bar"на"foo_bar"

Это соглашение об именах, с которым bash в порядке, где как sh - нет.

Замените «-» (дефис / тире / минус) на «_» (подчеркивание), и ошибка будет исправлена, и код будет работать как на bash, так и на sh

S471
источник