Sistema
Linux hosek 4.15.0-48-generic #51-Ubuntu SMP Wed Apr 3 08:28:49 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
Problema
Necesito obtener resultados como comandos, en un script bash, para almacenar variables.
Ejemplo
sed -n '/# Main configuration./,/# Websites./p' webcheck-$category.cfg | sed '1,1d' | sed '$ d'
Este comando devuelve estas líneas:
email_sender='[email protected]'
email_recipients='[email protected]'
¿Cómo puedo leer / ejecutar estos resultados / líneas como comandos en el script? ¿Almacenar esta salida en el archivo y luego leerlo solo por source
comando?
Intenté | source
al final del comando, pero solo se lee de los archivos.
Lo intenté echo
al principio, pero eso no tuvo ningún efecto.
Gracias.
fuente
for var in email_sender email_recipient email_subject email_attachement etc ; do printf -v "${var}" '%s' "$(grep -oP $var'=\K.*' webcheck-$category.cfg)"; done
Sin embargo, esto falla los criterios "simples".Puede usar la sustitución de procesos :
fuente
o
Salida:
[email protected] [email protected]
fuente
bash read builtin maneja cosas como esta muy bien.
read
lee líneas de stdin en variables.-d ''
desactiva la división de espacios en blanco, excepto las nuevas líneas.-r
desactiva los\
escapes.cmdA < <(cmdB)
funciona de manera similar a cmdB | cmdA, excepto en el anterior cmdA, se ejecuta en ~ este ~ shell, en lugar de un subshell, que es necesario para que la lectura funcione como se espera.fuente
var=value
?