Comando integrado Bash eval

comando eval

En Tipo Unix sistemas operativos, eval es un comando incorporado del Intento cáscara. Eso concatena sus argumentos en un solo cuerda , uniendo los argumentos con espacios, luego ejecuta esa cadena como un comando bash. Es similar a correr bash -c ' cuerda ' , pero eval ejecuta el comando en el entorno de shell actual en lugar de crear un proceso de shell secundario.

Descripción

eval evalúa todos sus argumentos de cadena, los concatena con un espacio, luego evalúa esa cadena y la ejecuta como un comando.

Las cadenas proporcionadas a eval puede contener palabras reservadas . Por ejemplo, pueden contener palabras clave de bucle, como por .. en , o condicionales, como Si .. luego .. elif . Estos se evalúan en una primera pasada, luego se evalúa la cadena resultante.

Sintaxis

|_+_|

Ejemplos de

|_+_|

Asignar cadenas a variables c , a1 , y a2 . Entonces, usa eval para evaluar esos argumentos y unirlos en una sola cadena, con un espacio entre cada uno. Luego, ejecute esa cadena como un comando, ' echo ¡Hola Mundo! '. Producción:

|_+_| |_+_|

Aquí, eval se utiliza para proporcionar una capa adicional de evaluación antes de que se ejecute un comando. Específicamente, eval evalúa $ {$ cmd1} a ' $ {cmd2} '(la barra invertida escapes el signo de dólar, por lo que se evalúa como un literal $ carácter), luego pasa esa cadena a bash para su ejecución. El comando $ {cmd2} es evaluado por bash usando la expansión de parámetros (ver expansión de parámetros en bash para más información). El resultado final es el comando ' echo Hola! '. Producción:

|_+_|

Ejemplo: eval $ (ssh-agent)

La ssh-agent El software auxiliar almacena las claves SSH y las contraseñas en la memoria y las usa automáticamente para autenticar nuevas conexiones SSH sin la intervención del usuario. Su salida está diseñada para ser evaluada con eval .

|_+_|

Esta es la forma estándar de iniciar ssh-agent. El comando ssh-agent se incluye en el sustitución de comando formulario, $( .. ) . Este formulario ejecuta la cadena de comando adjunta y usa la salida como argumento en el comando actual.

Si en cambio tuvieras que correr ssh-agent normalmente, se ejecutaría en un subshell y generaría su configuración de shell:

|_+_|

Sin embargo, esto por sí solo no es útil: la subcapa no puede afectar el entorno del shell principal. Por lo tanto, esta configuración no es conocida por la sesión de terminal actual que ejecutó el comando, ni por ninguna sesión nueva que cree. Cuando sale del shell, se olvida la configuración. Si intenta iniciar una nueva conexión SSH, siempre se le solicitará la contraseña de su clave SSH, porque el shell actual no conoce la configuración del agente.

Sin embargo, si usa eval $ (agente ssh) , la configuración se agrega al entorno de la Actual cáscara. Cuando inicia una conexión SSH, el agente le solicita la contraseña de la clave una vez y configura el proceso del demonio ssh-agent. Luego, cuando crea nuevas conexiones SSH, el demonio lo autentica automáticamente con las credenciales almacenadas en la memoria. Recuerda las credenciales hasta que cierre la sesión del sistema operativo o reinicie la computadora.

La próxima vez que desee iniciar el demonio, ejecute eval $ (agente ssh) nuevamente e ingrese su contraseña.

ejecutivo - Destruya el shell actual y reemplácelo con un nuevo proceso.