/ bin / sh: помилка імпорту функції визначення для `деякої функції '


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'

Відповіді:


17

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

/ bin / bash дозволяє дефісам в іменах функцій, / bin / sh (оболонка Борна) не робить. Тут порушена "деяка функція" була експортована bash, а bash називається yum, який викликав / bin / sh, який повідомив про помилку вище.

fix: перейменуйте функції оболонки, щоб не було дефісів

man bash каже, що ідентифікатори bash можуть складатися з "лише буквено-цифрових символів та підкреслень"

Помилка / bin / sh набагато явніше:

some-function () { :; }

sh: `деяка функція ': недійсний ідентифікатор


Зауважте, що в bashдефісі дозволено ім'я функції, а не ім'я параметра.
чепнер

@chepner Що з підкресленням? Чи дозволено підкреслення в назві функції та назви параметра?
BH2017

У моїй системі bash 4 дозволяє іменам функцій мати дефіси, але bash 3 ні - я припускаю, що в системі OP / bin / sh є bash 3, а / bin / bash є bash 4
Mark Fox

2

Змінити / виправити ім'я функції з "foo-bar"на"foo_bar"

Це умова іменування, з яким bash гаразд, де як sh - ні.

Замініть "-" (дефіс / тире / мінус) на "_" (підкреслення), і помилка виправляється, і код працює як на bash, так і на sh

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.