grep을 사용하여 일부 로그 파일에 색상을 지정하려고 합니다. 나는 다음과 같은 스크립트를 작성했습니다.
#!/bin/bash
com="GREP_COLOR=\"1;36\" egrep --color=always '[^a-zA-Z0-9]' $log |less -R"
log="/var/log/syslog"
eval $com
실행 중에 $log가 누락되었습니다!
나는 이것을 시도했습니다 :
#!/bin/bash
com="`GREP_COLOR=\"1;36\" egrep --color=always '[^a-zA-Z0-9]' $log |less -R`"
log="/var/log/syslog"
eval $com
아무 일도하지!
내 코드에 어떤 문제가 있는지 알 수 있나요?
답변1
여기서는 완전히 피할 수 있습니다.
function color_log() {
log=$1
GREP_COLOR="1;36" egrep --color=always '[^a-zA-Z0-9]' $log | less -R
}
color_log "/var/log/syslog"
답변2
첫 번째 스크립트에서 이스케이프해야 합니다 $
.$log
#!/bin/bash
com="GREP_COLOR=\"1;36\" egrep --color=always '[^a-zA-Z0-9]' \$log |less -R"
log="/var/log/syslog"
eval $com
편집하다:
이 특별한 경우에는 실제로 사용할 필요가 없으므로 eval
ДМИТРИЙ와 같은 대안적이고 안전한 방법을 선호하는 것이 좋습니다. 반면에 설계오류는 eval
먼저 사용하다가 해결한 코딩오류는 참고가 되지 않았습니다 $log
. eval
관련된 모든 취약점으로 인해 확실히 합법적인 부정적인 언론 보도가 있지만, 이는 여전히 알 가치가 있는 매우 강력한 지침입니다 . 주의 깊게 작성된 평가는 악의적이거나 우발적인 코드 실행을 방지할 수 있습니다.