/ bin / sh: errore durante l'importazione della definizione della funzione per `some-function '


14

Ho riscontrato questo errore durante l'aggiornamento di bash per il problema di sicurezza 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'

Risposte:


17

[modificato dopo il 1 ° commento di: @chepner - grazie!]

/ bin / bash consente trattini nei nomi delle funzioni, / bin / sh (shell Bourne) no. Qui, l'offesa "qualche funzione" era stata esportata da bash e bash chiamato yum che chiamava / bin / sh che riportava l'errore sopra.

correzione: rinomina le funzioni della shell per non avere trattini

man bash afferma che gli identificatori bash possono consistere: "solo di caratteri alfanumerici e caratteri di sottolineatura"

L'errore / bin / sh è molto più esplicito:

some-function () { :; }

sh: `some-function ': non un identificatore valido


Si noti che in bash, un trattino è consentito nel nome di una funzione, ma non nel nome di un parametro.
Chepner,

@chepner Che ne dici di un trattino basso? È consentito un carattere di sottolineatura nel nome di una funzione e nel nome del parametro?
BH2017,

Nel mio sistema bash 4 consente ai nomi di funzione di avere trattini, ma bash 3 no - suppongo sul sistema dell'OP / bin / sh è bash 3 e / bin / bash è bash 4
Mark Fox

2

Cambia / Correggi il nome della funzione da "foo-bar"a"foo_bar"

È la convenzione di denominazione con cui bash va bene, dove sh non lo è.

Sostituisci "-" (trattino / trattino / meno) con "_" (trattino basso) e l'errore viene corretto e il codice funziona sia su bash che su sh

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.