/ bin / sh: błąd podczas importowania definicji funkcji dla `some-function '

14

Wystąpił ten błąd podczas aktualizacji bash dla problemu bezpieczeństwa 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
źródło

Odpowiedzi:

17

[edytowane po 1 komentarzu od: @chepner - dzięki!]

/ bin / bash zezwala na łączniki w nazwach funkcji, / bin / sh (powłoka Bourne'a) nie. Tutaj obrażająca „jakaś funkcja” została wyeksportowana przez bash, a bash o nazwie yum, który wywołał / bin / sh, który zgłosił błąd powyżej.

fix: zmień nazwę funkcji powłoki, aby nie miała łączników

man bash mówi, że identyfikatory bash mogą składać się z: „tylko znaków alfanumerycznych i znaków podkreślenia”

Błąd / bin / sh jest o wiele bardziej wyraźny:

some-function () { :; }

sh: `some-function ': niepoprawny identyfikator

D McKeon
źródło
Zauważ, że in bash, łącznik jest dozwolony w nazwie funkcji, ale nie w nazwie parametru.
chepner
@chepner Co z podkreśleniem? Czy w nazwie funkcji i nazwie parametru dozwolony jest znak podkreślenia?
BH2017
W moim systemie bash 4 pozwala, aby nazwy funkcji miały łączniki, ale bash 3 nie - zakładam, że w systemie operacyjnym / bin / sh to bash 3, a / bin / bash to bash 4
Mark Fox
2

Zmień / Napraw nazwę funkcji z "foo-bar"na"foo_bar"

Jest to konwencja nazewnictwa, w której bash jest w porządku, a sh nie.

Zamień „-” (łącznik / myślnik / minus) na „_” (podkreślenie), błąd zostanie naprawiony, a kod działa zarówno na bash, jak i sh

S471
źródło