es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

La variable de entorno “BASH_FUNC_which%%” de la shell de RHEL 8.5 causa que los pods de K8S fallen.

Problema

Después de migrar a RHEL 8.5 desde 8.4, comenzaron a ocurrir fallos en los pods de K8S.

spec.template.spec.containers[0].env[52].name: Valor inválido: "BASH_FUNC_which%%": un nombre válido de variable de entorno debe
estar compuesto por caracteres alfabéticos, dígitos, '_', '-', o '.', y no debe comenzar con un dígito (por ejemplo, 'my.env-name', o 'MY_ENV.NAME', o 'MyEnvName1', la expresión regular utilizada para la validación es '[-._a-zA-Z][-._a-zA-Z0-9]*')

El comando env en el shell de inicio de sesión muestra que BASH_FUNC_which%% se define de la siguiente manera.

BASH_FUNC_which%%=() { ( alias;
eval ${which_declare} ) | /usr/bin/which --tty-only --read-alias --read-functions --show-tilde --show-dot "$@"
}

Se sugiere que /etc/profile.d/which2.sh es el que configura BASH_FUNC_which%%.

  • /etc/profile.d/which2.sh
    “`
  • </ul>

    <h1>shellcheck shell=sh</h1>

    <h1>Script de inicialización para bash, sh, mksh y ksh</h1>

    which<em>declare="declare -f"
    which</em>opt="-f"
    which_shell="$(cat /proc/$$/comm)"

    if [ "$which<em>shell" = "ksh" ] || [ "$which</em>shell" = "mksh" ] || [ "$which<em>shell" = "zsh" ] ; then
    which</em>declare="typeset -f"
    which_opt=""
    fi

    which ()
    {
    (alias; eval ${which_declare}) | /usr/bin/which –tty-only –read-alias –read-functions –show-tilde –show-dot "$@"
    }

    export which<em>declare
    export ${which</em>opt} which
    “`

    Al eliminarlo, se solucionó el problema.

    Pregunta

    Por favor, ayúdame a entender dónde exactamente se configura BASH_FUNC_which%% en RHEL 8.5 y cuál es el propósito de este BASH_FUNC_which%%, por qué se introdujo en RHEL.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Respuesta

    Configuración de BASH_FUNC_which%% en RHEL8.5

    En RHEL8.5, el script de inicialización /etc/profile.d/which2.sh configura la variable de entorno BASH_FUNC_which%%. El script define una función llamada which que se utiliza para encontrar la ubicación de un archivo binario ejecutable. La definición de esta función se almacena en BASH_FUNC_which%%, que es una instancia de un tipo especial de variable de entorno que se define en Bash cuando se exporta una función.

    Propósito de BASH_FUNC_which%%

    El propósito de la variable de entorno BASH_FUNC_which%% es almacenar una función de shell que se puede utilizar para encontrar la ubicación de un archivo ejecutable. Esta función se define mediante el script de inicialización /etc/profile.d/which2.sh, que crea un alias llamado which que invoca a la función. La función which busca en la variable de entorno PATH del usuario y devuelve la ubicación del primer archivo ejecutable que coincide con el nombre especificado. También resuelve cualquier alias o función de shell que pueda estar definida para el nombre dado.

    Introducción de BASH_FUNC_which%% en RHEL

    La variable de entorno BASH_FUNC_which%% se ha introducido en RHEL como parte del entorno de shell predeterminado para proporcionar una herramienta más completa para encontrar y ejecutar comandos. El uso de la función which simplifica el proceso de ubicación y ejecución de comandos, especialmente cuando se instalan varias versiones de un comando o cuando la variable de entorno PATH del usuario está configurada para incluir ubicaciones no estándar. Además, la función proporciona un mecanismo para resolver alias o funciones de shell que puedan interferir con la ejecución del comando deseado. Sin embargo, en algunos casos, como al ejecutar un contenedor, esta función puede causar problemas debido a los caracteres especiales en su nombre.

Comments are closed.