Eu tenho um script bash que limpa a fila de correio periodicamente. Por motivos, optamos por excluir qualquer e-mail para @mms.att.net e outros gateways de e-mail2SMS que estejam há mais de 9 horas na fila e ainda não foram entregues.
Simplificado, o script faz isso:
domains=`cat /etc/mail/email2textdomains.txt`
egrep $domains /var/log/maillog | .... other tasks
e o conteúdo de /etc/mail/email2textdomains.txt
é exatamente
"mms.att.net|vtxt.com|vtext.com|vzwpix.com"
Portanto, a linha egrep deve ser esta, que é exatamente o que eu digitaria na linha de comando.
egrep "mms.att.net|vtxt.com|vtext.com|vzwpix.com" file | ...
Se eu executar assim, será um pipeline de mais de 5 estágios de comandos, cada um lendo stdin do stdout anterior. Esta claramente não é a pesquisa que eu quero fazer.
egrep mms.att.net|vtxt.com|vtext.com|vzwpix.com file | ...
No entanto, quando executados, as duas aspas duplas são tratadas de maneira diferente - elas se tornam parte da string, então estamos essencialmente procurando por
- "mms.att.net
- vtxt.com
- vtext.com
- vzwpix.com"
Claramente, não entendi como as citações funcionam - a resolução foi alterar a linha incluída para remover as aspas duplas, resultando em uma linha que não deveria funcionar, mas funciona.
Eu tentei testar canalizando para od -a
o qual não mostra nenhum caractere não imprimível.
Por que funciona, fazendo com que o conteúdo /etc/mail/email2textdomains.txt
seja exatamente
mms.att.net|vtxt.com|vtext.com|vzwpix.com
quando deve ser um longo pipeline até a falha, conforme escrito?