/ bin / sh: Fehler beim Importieren der Funktionsdefinition für 'some-function'

13

Beim Aktualisieren der Bash für das Sicherheitsproblem CVE-2014-6271 ist folgender Fehler aufgetreten:

# 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
quelle

Antworten:

16

[bearbeitet nach dem 1. Kommentar von: @chepner - danke!]

/ bin / bash erlaubt Bindestriche in Funktionsnamen, / bin / sh (Bourne-Shell) nicht. Hier wurde die anstößige "some-function" von bash exportiert, und bash namens yum, das / bin / sh aufrief und den obigen Fehler meldete.

Fix: Benenne die Shell-Funktionen um, damit sie keine Bindestriche haben

Man Bash sagt, dass Bash-Bezeichner bestehen können: "Nur aus alphanumerischen Zeichen und Unterstrichen"

Der / bin / sh-Fehler ist viel expliziter:

some-function () { :; }

sh: `some-function ': kein gültiger Bezeichner

D McKeon
quelle
Beachten Sie, dass in basheinem Funktionsnamen ein Bindestrich zulässig ist, nur nicht in einem Parameternamen.
Chepner
@chepner Was ist mit einem Unterstrich? Ist ein Unterstrich in einem Funktions- und Parameternamen zulässig?
BH2017
Auf meinem System erlaubt bash 4, dass Funktionsnamen Bindestriche haben, aber bash 3 nicht - Ich gehe davon aus, dass / bin / sh auf dem OP bash 3 und / bin / bash bash 4 ist
Mark Fox
2

Ändern / Korrigieren Sie den Funktionsnamen von "foo-bar"nach"foo_bar"

Es ist die Namenskonvention, mit der bash ok ist, wobei als sh nicht .

Ersetzen Sie "-" (Bindestrich / Bindestrich / Minus) durch "_" (Unterstrich), und der Fehler wird behoben. Der Code funktioniert sowohl für Bash als auch für Sh

S471
quelle