Bem aqui, simplesmente poderia ser evitado:
function color_log() {
log=$1
GREP_COLOR="1;36" egrep --color=always '[^a-zA-Z0-9]' $log | less -R
}
color_log "/var/log/syslog"
Estou tentando usar o grep para colorir alguns arquivos de log. Eu escrevi um script e uma parte dele se parece com isso:
#!/bin/bash
com="GREP_COLOR=\"1;36\" egrep --color=always '[^a-zA-Z0-9]' $log |less -R"
log="/var/log/syslog"
eval $com
A execução estava faltando $ log!
Eu tentei isso:
#!/bin/bash
com="'GREP_COLOR=\"1;36\" egrep --color=always '[^a-zA-Z0-9]' $log |less -R'"
log="/var/log/syslog"
eval $com
Nada aconteceu!
Você pode ver algum erro no meu código?
Bem aqui, simplesmente poderia ser evitado:
function color_log() {
log=$1
GREP_COLOR="1;36" egrep --color=always '[^a-zA-Z0-9]' $log | less -R
}
color_log "/var/log/syslog"
Você precisa escapar do $
em $log
no seu primeiro script:
#!/bin/bash
com="GREP_COLOR=\"1;36\" egrep --color=always '[^a-zA-Z0-9]' \$log |less -R"
log="/var/log/syslog"
eval $com
Editar:
Na verdade, não há necessidade de usar eval
neste caso em particular, de modo que sugerir uma maneira alternativa e mais segura como a ДМИТРИЙ fez é definitivamente preferida. Por outro lado, enquanto o erro de design era usar eval
, o erro de codificação que eu abordei não era para citar $log
. Embora eval
definitivamente tenha uma má imprensa justificada por causa de todas as vulnerabilidades associadas a ela, é, no entanto, uma instrução muito poderosa que vale a pena conhecer. Os evals cuidadosamente escritos podem evitar a execução de códigos maliciosos ou inesperados.