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
関連するすべての脆弱性により、間違いなく正当な否定的なメディア報道がありますが、これは依然として知る価値がある非常に強力なガイドラインです。注意深く書かれた評価は、悪意のあるまたは偶発的なコードの実行を防ぐことができます。