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
Questão
Eu preciso obter a saída como comandos, em um script bash, para armazenar variáveis.
Exemplo
sed -n '/# Main configuration./,/# Websites./p' webcheck-$category.cfg | sed '1,1d' | sed '$ d'
Este comando retorna estas linhas:
email_sender='[email protected]'
email_recipients='[email protected]'
Como posso ler / executar essas saídas / linhas como comandos no script? Está armazenando essa saída no arquivo e, em seguida, a lê apenas por source
comando?
Eu tentei | source
no final do comando, mas ele lê apenas de arquivos.
Eu tentei echo
no começo, mas isso não teve efeito.
Obrigado.
fonte
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
No entanto, isso falha nos critérios "simples".Você pode usar a substituição de processo :
fonte
ou
Resultado:
[email protected] [email protected]
fonte
o bash read builtin lida bem com coisas como essa.
read
lê linhas de stdin em variáveis.-d ''
desativa a divisão de espaço em branco, exceto as novas linhas.-r
desativa\
escapes.cmdA < <(cmdB)
funciona de maneira semelhante ao cmdB | O cmdA, exceto no antigo cmdA, é executado neste ~ shell, em vez de um subshell, necessário para que a leitura funcione conforme o esperado.fonte
var=value
?