Système
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
Problème
J'ai besoin d'obtenir une sortie sous forme de commandes, dans un script bash, pour stocker des variables.
Exemple
sed -n '/# Main configuration./,/# Websites./p' webcheck-$category.cfg | sed '1,1d' | sed '$ d'
Cette commande renvoie ces lignes:
email_sender='[email protected]'
email_recipients='[email protected]'
Comment puis-je lire / exécuter ces sorties / lignes en tant que commandes dans le script? Est-ce que le stockage de cette sortie dans le fichier, puis la lecture par source
commande uniquement?
J'ai essayé | source
à la fin de la commande, mais elle ne lit que les fichiers.
J'ai essayé echo
au début, mais cela n'a eu aucun effet.
Merci.
la source
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
Cependant cela échoue aux critères "simples".Vous pouvez utiliser la substitution de processus :
la source
ou
Production:
[email protected] [email protected]
la source
bash read builtin gère bien des choses comme ça.
read
lit les lignes de stdin en variables.-d ''
désactive le fractionnement des espaces, sauf pour les retours à la ligne.-r
désactive les\
évasions.cmdA < <(cmdB)
fonctionne de manière similaire à cmdB | cmdA, sauf dans l'ancien cmdA est exécuté dans ~ ce ~ shell, au lieu d'un sous-shell, qui est requis pour que la lecture fonctionne comme prévu.la source
var=value
?