Ejecutar Comandos en una Variable en Bash Script
- Variable de secuencia de comandos bash
-
Use el comando
Eval
para ejecutar comandos en una variable en Bash Script -
Use
bash
con el indicador-c
para ejecutar comandos en una variable en Bash Script -
Utilice la sustitución de comandos
$()
para ejecutar comandos en una variable en Bash Script
Esta guía trata sobre almacenar un comando Bash en una variable y luego ejecutarlo directamente desde esta variable. Primero, discutiremos varios métodos para ejecutar comandos contenidos en una variable, seguido de varios ejemplos de secuencias de comandos.
Empecemos.
Variable de secuencia de comandos bash
Las variables son una característica esencial impulsada por Bash. Ya sea que los use en una estructura de control if
, una estructura de “caso” o simplemente dentro de los scripts, no solo mejoran sus scripts sino que también facilitan mucho su comprensión.
También puede ejecutarlos como secuencias de comandos, lo que facilita especialmente la vida cuando está canalizando muchos comandos y los comandos son muy largos. Esto reducirá la longitud de su guión, que podría tener cien palabras a una, que podría no tener ni una docena de palabras.
Imagine depurar un script que tiene cien palabras frente a uno que no tiene ni una docena de palabras; contempla el tiempo que puedes ahorrar.
A veces, necesitamos escribir envoltorios de Bash que tomen comandos del usuario, los almacenen en variables y ejecuten condicionalmente algunos de ellos después de aplicar alguna lógica comercial (tal vez una serie de decisiones if-else
). Ahora, en estos escenarios, debemos observar los métodos que pueden ayudarnos a analizar e interpretar el comando almacenado en variables para ejecutarlo como un comando Bash.
Aquí discutiremos algunas de las formas más eficientes de ejecutar comandos contenidos en una variable.
Use el comando Eval
para ejecutar comandos en una variable en Bash Script
Algunos scripts de Bash requieren que construyas una cadena usando valores de entrada o variables (por ejemplo) y la ejecutes como un comando al final. El comando eval
es la respuesta en estas situaciones.
Para evaluar parámetros como un comando de shell, use el comando Bash eval
.
El comando de shell recibe una cadena de argumentos y usa esa cadena para ejecutar el comando. Luego, el comando se ejecuta en el shell actual mediante eval
.
Este comando es útil cuando se ejecuta un comando que usa un operador específico o términos reservados.
Sintaxis:
eval [arguments...]
Los argumentos se pasan a este comando, se combinan como un literal de cadena y luego se envían a Bash para su ejecución. Este comando devuelve el estado de salida después de la ejecución del comando.
Si no se pasan argumentos a este comando o se pasa nulo, devuelve 0 como estado de salida.
Ejemplo 1: Cuente el número de palabras en un archivo.
Supongamos que tenemos un archivo mysample.txt
que contiene algunas líneas de texto. Si tenemos que contar el número de palabras de ese archivo, podemos usar el comando wc -w
.
Realizaremos esta tarea mediante el comando eval
. El script de Bash será:
#!/bin/bash
wordcount="wc -w mysample.txt"
eval $wordcount
Veamos su salida:
Ejemplo 2: Use múltiples variables para construir el comando.
Supongamos que necesitamos imprimir una declaración Bienvenido a Eval Command
. Podemos hacer esto usando el comando eval
:
#!/bin/bash
var1="Welcome to Eval Command"
comm1="echo"
eval $comm2 $var1
En este script hemos creado dos variables, una que contiene el mensaje a imprimir y la otra que contiene el comando echo
. Pasaremos estas dos variables al comando eval
, y construirá todo el comando en consecuencia.
Después de la ejecución de este script, obtendremos el siguiente resultado:
Ejemplo 3: Imprime los Valores de las Variables.
En el siguiente ejemplo, imprimiremos el valor de una variable que contiene otra variable.
#!/bin/bash
str1="my script"
str2= str1
comm="echo "
eval $comm '$str2'
La salida del script anterior será:
Ejemplo 4: Imprime la Suma de los Números.
En el siguiente ejemplo, imprimiremos la suma de los números que van del 1 al 4 utilizando el bucle for
del script. Luego imprimiremos esa suma usando el comando eval
.
El script para este problema es:
#!/bin/bash
sum=0
for n in {1..4}
do
sum=$(($sum+$n))
done
comm="echo 'The result of sum from 1-4 is: '"
eval $comm $sum
La salida del script anterior será:
Use bash
con el indicador -c
para ejecutar comandos en una variable en Bash Script
Por defecto, el intérprete de comandos bash
lee los comandos de la entrada estándar o de un archivo y los ejecuta. Sin embargo, si se establece el indicador -c
, el intérprete bash
lee los comandos del primer parámetro de cadena (y debería ser un argumento que no sea una opción).
Por lo tanto, podemos usarlo para ejecutar comandos almacenados en una variable de cadena Bash.
Por ejemplo, el siguiente script primero asigna la cadena de comando ls
a la variable COMMAND
. Luego, usa el intérprete bash
con el comando -c
para usar la variable COMMAND
como entrada.
#!/bin/bash
COMMAND="ls"
bash -c $COMMAND
El comando anterior enumerará todos los directorios y archivos en el directorio de trabajo actual del archivo de script.
Utilice la sustitución de comandos $()
para ejecutar comandos en una variable en Bash Script
Podemos usar el método de sustitución de comandos para ejecutar el comando almacenado en una variable como:
#!/bin/bash
COMMAND="ls"
$(echo $COMMAND)