Seu script não deve gerar aspas simples. Quando você escreve
egrep 'foo|bar'
as aspas simples fazem parte da sintaxe do shell. Eles protegem os personagens dentro deles contra a expansão. Se aspas simples aparecerem na saída do seu script, elas serão consideradas como caracteres comuns. Simplesmente os omita.
Existe uma maneira muito mais fácil de escrever o seu script: substitua as novas linhas por símbolos de pipe e remova o último.
list=$(</usr/local/directadmin/data/users/$user/domains.list tr '\n' '|')
echo "${list%|}"
Você não precisa fazer isso se estiver procurando por um conjunto fixo de strings. Em vez disso, use a opção -F
para grep
para solicitar que ele procure por cadeias de caracteres fixas e a opção -f
para solicitar que ele leia uma lista de padrões de um arquivo.
grep -Ff /usr/local/directadmin/data/users/bob/domains.list
Se você tiver domain.com
nesse arquivo, a pesquisa também retornará hits de strings mais longas, como otherdomain.com
. Então você pode querer usar o seu script para construir um padrão que tenha âncoras no início e no final, então evite correspondências espúrias. Eu não sei que tipo de pontuação o log do exim tem; Por exemplo, se os nomes estiverem cercados por espaços em branco, você desejará algo como
#!/bin/sh
list=$(</usr/local/directadmin/data/users/$1/domains.list tr '\n' '|')
echo " (${list%|}) "
e chame como
</var/log/exim/mainlog grep -E '/path/to/rowscript bob'
Ou faça o script chamar grep:
#!/bin/sh
shift
list=$(</usr/local/directadmin/data/users/$1/domains.list tr '\n' '|')
grep -E " (${list%|}) " -- "$@"
chamado como
</var/log/exim/mainlog /path/to/rowscript bob