/ bin / sh: erreur lors de l'importation de la définition de fonction pour `une fonction '

14

J'ai rencontré cette erreur lors de la mise à jour de bash pour le problème de sécurité 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 McKeon
la source

Réponses:

17

[édité après le 1er commentaire de: @chepner - merci!]

/ bin / bash autorise les tirets dans les noms de fonction, / bin / sh (shell Bourne) ne le permet pas. Ici, la "fonction" incriminée avait été exportée par bash, et bash appelé yum qui appelait / bin / sh qui rapportait l'erreur ci-dessus.

correction: renommer les fonctions shell pour ne pas avoir de tirets

man bash dit que les identifiants bash peuvent consister en: "uniquement des caractères alphanumériques et des traits de soulignement"

L'erreur / bin / sh est beaucoup plus explicite:

some-function () { :; }

sh: `une fonction ': pas un identifiant valide

D McKeon
la source
Notez que dans bash, un trait d'union est autorisé dans un nom de fonction, mais pas dans un nom de paramètre.
chepner
@chepner Et un trait de soulignement? Un trait de soulignement est-il autorisé dans un nom de fonction et un nom de paramètre?
BH2017
Sur mon système, bash 4 permet aux noms de fonction d'avoir des tirets, mais bash 3 ne le fait pas - je suppose que sur le système de l'OP / bin / sh est bash 3 et / bin / bash est bash 4
Mark Fox
2

Changer / fixer le nom de la fonction de "foo-bar"à"foo_bar"

C'est la convention de nommage avec laquelle bash est ok, alors que sh ne l'est pas.

Remplacez le "-" (trait d'union / tiret / moins) par "_" (trait de soulignement), et l'erreur est corrigée, et le code fonctionne à la fois sur bash et sh

S471
la source