Carregar arquivo exibindo valores de variáveis [RESOLVIDO]

1. Carregar arquivo exibindo valores de variáveis [RESOLVIDO]

Rondinelli Morais
rondinellimorais

(usa Ubuntu)

Enviado em 14/09/2011 - 10:34h

Olá pessoal um salve para todos.

Tem alguma forma de carregar um documento que mostra os valores dos comandos??
exemplo:

vamos supor que exista esse arquivo:
documento_1.log
+---------------------------------+
| usuario $(echo who) está usando |
| o sistema $(uname -a) na data e |
| horário $(echo date). |
+---------------------------------+

Agora quando eu for ler esse arquivo usando o cat, vamos supor que exista esse parâmetro:
cat --print-accept-command /home/usuario/document_1.log

saida:
+---------------------------------+
| usuario rondinelli está usando |
| o sistema Linux na data e |
| horário 14/09/2011 10:19:59 UTC.|
+---------------------------------+

Meu objetivo é o seguinte, criei uma pagina HTML template e no lugar dos valores coloquei $VARIAVEIS_GLOBAIS que ficaram no script, eu iria ler esse arquivo html e carregar seu conteúdo em uma $VAR, depois usaria o mutt e ssmpt para enviar uma mensagem no formato HTML, assim a mensagem seria enviada com as informações no lugar das vars.

Teria alguma forma de fazer isso?

Obrigao a todos!
Rondinelli Morais


  


2. Re: Carregar arquivo exibindo valores de variáveis [RESOLVIDO]

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 14/09/2011 - 23:23h

Porque você não cria o arquivo HTML com o script?
varia algo como:
#!/bin/bash

function _teste(){
cat <<FIM
<html>
usuario $(whoami) está usando
o sistema $(uname -a) na data e horário $(date).
</html>
FIM
}

_teste > arquivo.html

ou

Coloca o HTML direto no código do envio do e-mail.

Abraços







3. ....

Rondinelli Morais
rondinellimorais

(usa Ubuntu)

Enviado em 14/09/2011 - 23:45h

Então, hoje o sistema está assim como vc disse, criando dinamicamente, mas estou querendo mudar, tirar o código HTML. Virou um mundo de script html dentro do sistema, minha intenção era criar um diretório (view) e armazenar os templates HTML, depois de ter as variáveis no escopo do script carregadas, carregaria o template específico em uma var, e essa var seria o conteúdo do Email.

um amigo da faculdade me disse para pesquisar sobre PHP Script, estou pesquisando, mas se é o que estou pensando "Num vai ficar legal".

valew Brother
abraço


4. Re: Carregar arquivo exibindo valores de variáveis [RESOLVIDO]

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 14/09/2011 - 23:50h

Vai compensar usar o PHP Script se você vai usar PHP para enviar os e-mails.

Se vai usar o mutt, faz o arquivo como pensou com o conteúdo:

<html>
usuario $(whoami) está usando
o sistema $(uname -a) na data e horário $(date).
</html>

E depois usa dentro do seu script com um cat lendo esse arquivo html.

Abraços!


5. Re: Carregar arquivo exibindo valores de variáveis [RESOLVIDO]

Rondinelli Morais
rondinellimorais

(usa Ubuntu)

Enviado em 15/09/2011 - 09:48h

Então rai3mb ai é que está a grande sacada, dentro do documento HTML não fica os comandos, ficas os nomes das variáveis que por ventura irá está no escopo do script, exemplo:

template.html
----------------------------------
<!--doc html-->
o usuario $USUARIO_LOGADO está
usando o sistema $SO_INSTALADO
na data e horário $DATETIME
----------------------------------

{
#scopo do script
USUARIO_LOGADO="$(whoami)";
SO_INSTALADO="$(uname -a)";
DATETIME="$(date)";

# quando eu usar o comando
MENSAGEM="$(cat --whatever /home/usuario/view/template.html)";
}

a saída esperada usando o comando (echo "$MENSAGEM";) seria:
{
<!--doc html-->
o usuario rondinelli está
usando o sistema Linux #i686 Ubuntu kernel bla_bla_bla
na data e horário 15/09/2011 09:37:59
}

mais específico:
echo "$MENSAGEM" | mutt -e "set content_type=text/html" -s "ASSUNTO" "exemplo_mail@localhost.com.br"


6. Re: Carregar arquivo exibindo valores de variáveis [RESOLVIDO]

Rondinelli Morais
rondinellimorais

(usa Ubuntu)

Enviado em 15/09/2011 - 11:57h

esqueci de te dizer uma coisa, fiz aqui uma "Gambeta" que no momento é uma saida.

Seria da um replace das strings no script html pelo valores das variáveis:

exemplos funcionais já testados:

documento01 -> usuário logado é $USUARIO_LOGADO
sed -e "s|$.*|$(whoami)|g" documento01
saída: usuário logado é rondinelli


documento2 -> diretório raiz do usuario: $DIRETORIO_RAIZ
sed -e "s|$.*|$HOME|g" documento2
diretório raiz do usuario: /home/rondinelli

só que com isso eu teria que ter vários comandos do sed uma para cada variável no lugar de |$.*|,
a pergunta agora é?

será que é possível fazer isso utilizando expressão regular???
sed -e "s|$.*|$.*|g" documentox

ou seja ele acharia a expressão regular, e substituiria por ela mesmo, só que no scopo do script ela mesmo seria o valor da variável, isso não acontece é claro pois ele trata o segundo bloco como string '$.*', o objetivo era fazer com que o segundo bloco do sed mostrasse '$VAR', mas mesmo se isso acontecesse ainda sim $VAR seria uma string, então eu partiria para comandos como eval ou tr para executar o conteúdo de $VAR como sendo variável, então imprimiria seu conteúdo.

Obrigado.
abraço.


7. RESOLVIDO

Rondinelli Morais
rondinellimorais

(usa Ubuntu)

Enviado em 17/09/2011 - 23:07h

Fiz de um modo que funcionou legal, pelo menos resolveu meu problema, estou postando o código explicações nos comentário.
Obrigado abraço.






#!/bin/bash

# VARIÁVEIS
USUARIO_LOGADO=$(whoami);
SISTEMA_OPERACIONAL_INSTALADO=$(uname --kernel-name);

ARRAY_COMANDOS=("$USUARIO_LOGADO" "$SISTEMA_OPERACIONAL_INSTALADO" "$HOME"); # ARMAZENO MEUS COMANDO EM UMA ARRAY, NA ORDEM QUE SE ENCONTRANO NO ARQUIVO
LENGTH="${#ARRAY_COMANDOS[@]}";

TEXTO=$(cat "$HOME/Área de Trabalho/document01"); # CARREGO O CONTEÚDO DO ARQUIVO
QUANTIDADE_LINHAS=$(echo "$TEXTO" | wc -l);

k=1;
i=0;
while :
do
LINHA=$(echo "$TEXTO" | sed -n "$k p"); # A CADA LINHA
OCORRENCIA=$(echo "$LINHA" | grep -io "\(\$[a-zA-Z]\+\(\(_\)[a-zA-Z]\+\)*\)"); # VERIFICA SE EXISTE UMA VARIÁVEL

if [ ! -z "$OCORRENCIA" ];
then
# SE EXISTIR, USA O SED PARA SUBSTITUIR A VARIÁVEL (regexp) DA LINHA PELA POSIÇÃO i DO ARRAY DE COMANDO
# POR ISSO A NECESSIDADE DE PASSAR O ARRAY NA ORDEM DAS VARs DO ARQUIVO
echo "$LINHA" | sed -n "s|\(\$[a-zA-Z]\+\(\(_\)[a-zA-Z]\+\)*\)|${ARRAY_COMANDOS[$i]}|p";
i=$((i+1));
else
echo "$LINHA";
fi

# ESSE if ENCERRA O LOOP QUANDO TODAS AS LINHAS DO ARQUIVO FOREM LIDAS
if [ $k -eq $QUANTIDADE_LINHAS ];
then
break;
else
k=$((k+1));
fi;
done;


8. Re: Carregar arquivo exibindo valores de variáveis [RESOLVIDO]

Raimundo Alves Portela
rai3mb

(usa Outra)

Enviado em 18/09/2011 - 11:04h

Legal.

Só uma dica que eu mudaria nesse script, com relação a leitura linha a linha do arquivo, da para fazer assim:


arquivo > while read LINHA;
do

......código...
done


Ele já faz a entrada linha a linha do arquivo dentro do loop while ;-)
Abraços


9. Re: Carregar arquivo exibindo valores de variáveis [RESOLVIDO]

Rondinelli Morais
rondinellimorais

(usa Ubuntu)

Enviado em 18/09/2011 - 11:24h

sim....verdade, eu também prefiro esse modo,

meu script de produção em vez da um echo na linha eu concateno a linha tratada à uma variável MENSAGEM_FINAL,
Assim:
if [ ! -z "$OCORRENCIA" ];
then
MENSAGEM_FINAL="$MENSAGEM_FINAL\n"$(echo "$LINHA" | sed -n "s|\(\$[a-zA-Z]\+\(\(_\)[a-zA-Z]\+\)*\)|${COLLECTION_COMMAND[$i]}|p");
i=$((i+1));
else
MENSAGEM_FINAL="$MENSAGEM_FINAL\n$LINHA";
fi
fi

mas eu não sei o que acontece, no inicio tentei usar o modo arquvo > while read do ... done; mas a variável
$MENSAGEM_FINAL zera quando está fora do escopo do while.



valew falou






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts