/ bin / sh: error mengimpor definisi fungsi untuk `some-function '

13

Saya mengalami kesalahan ini ketika memperbarui bash untuk masalah keamanan 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
sumber

Jawaban:

16

[diedit setelah komentar pertama dari: @chepner - terima kasih!]

/ bin / bash memungkinkan tanda hubung dalam nama fungsi, / bin / sh (Bourne shell) tidak. Di sini, "beberapa fungsi" yang menyinggung telah diekspor oleh bash, dan bash bernama yum yang disebut / bin / sh yang melaporkan kesalahan di atas.

memperbaiki: mengganti nama fungsi shell untuk tidak memiliki tanda hubung

man bash mengatakan bahwa pengidentifikasi bash dapat terdiri: "hanya karakter alfanumerik dan garis bawah"

Kesalahan / bin / sh jauh lebih eksplisit:

some-function () { :; }

sh: `some-function ': bukan pengidentifikasi yang valid

D McKeon
sumber
Perhatikan bahwa dalam bash, tanda hubung dibolehkan dalam nama fungsi, hanya saja tidak dalam nama parameter.
chepner
@chepner Bagaimana dengan garis bawah? Apakah garis bawah diperbolehkan dalam nama fungsi dan nama parameter?
BH2017
Pada sistem saya, bash 4 memungkinkan nama fungsi memiliki tanda hubung tetapi bash 3 tidak - Saya berasumsi pada sistem OP / bin / sh adalah bash 3, dan / bin / bash adalah bash 4
Mark Fox
2

Ubah / Perbaiki nama fungsi dari "foo-bar"menjadi"foo_bar"

Ini adalah konvensi penamaan yang oleh bash baik-baik saja, sedangkan sh tidak.

Ganti "-" (tanda hubung / putus / minus) dengan "_" (garis bawah), dan kesalahan diperbaiki, dan kode bekerja pada bash dan sh

S471
sumber