/ bin / sh: error al importar la definición de función para 'alguna función'

14

Encontré este error al actualizar bash por el problema de seguridad 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
fuente

Respuestas:

17

[editado después del primer comentario de: @chepner - ¡gracias!]

/ bin / bash permite guiones en los nombres de funciones, / bin / sh (Bourne shell) no. Aquí, bash había exportado la "alguna función" ofensiva, y bash llamó a yum, que llamó a / bin / sh, que informó el error anterior.

solución: cambiar el nombre de las funciones de shell para que no tengan guiones

man bash dice que los identificadores de bash pueden consistir en "solo caracteres alfanuméricos y guiones bajos"

El error / bin / sh es mucho más explícito:

some-function () { :; }

sh: `alguna función ': no ​​es un identificador válido

D McKeon
fuente
Tenga en cuenta que en bash, se permite un guión en el nombre de una función, pero no en el nombre de un parámetro.
chepner
@chepner ¿Qué pasa con un guión bajo? ¿Se permite un guión bajo en el nombre de una función y el nombre del parámetro?
BH2017
En mi sistema, bash 4 permite que los nombres de las funciones tengan guiones, pero bash 3 no: supongo que en el sistema del OP / bin / sh es bash 3 y / bin / bash es bash 4
Mark Fox
2

Cambiar / corregir el nombre de la función de "foo-bar"a"foo_bar"

Es la convención de nomenclatura con la que bash está bien, donde como sh no lo está.

Reemplace el "-" (guión / guión / menos) con "_" (guión bajo), y el error se arregla, y el código funciona tanto en bash como en sh

S471
fuente