これ
/usr/sbin/conntrack -L |grep $1 | grep ESTAB |grep 'dport=80' | awk "{system("/usr/sbin/conntrack -D --orig-src $1 --orig-dst" substr($6,5) "-p tcp --orig-port-src " substr($7,7)" --orig-port-dst 80");}"
この出力を提供します
awk: cmd. line:2: {system(/usr/sbin/conntrack
awk: cmd. line:2: ^ unexpected newline or end of string
これをデバッグする必要があります。
ベストアンサー1
あなたのawk
スクリプト:
awk "{system("/usr/sbin/conntrack -D --orig-src $1 --orig-dst" substr($6,5) "-p tcp --orig-port-src " substr($7,7)" --orig-port-dst 80")}"
このスクリプトには引用の問題があります。
スクリプトは二重引用符で囲まれており、二重引用符も使用されます。内部二重引用符が原因で問題が発生する可能性があります。
解決策はスクリプトを一重引用符で囲むことです(シェルが解釈されないように、スクリプトはawk
常に一重引用符で囲む必要があります)。$0
awk '{system("/usr/sbin/conntrack -D --orig-src " $1 " --orig-dst " substr($6,5) " -p tcp --orig-port-src " substr($7,7) " --orig-port-dst 80")}'
grep
実行中の最後の2つの呼び出しをスクリプトにawk
簡単に移動することもできます。
awk '/ESTAB/ && /dport=80/ {system("/usr/sbin/conntrack -D --orig-src " $1 " --orig-dst " substr($6,5) " -p tcp --orig-port-src " substr($7,7) " --orig-port-dst 80");}'
もう少し努力すれば、最初のものも手に入ります。
awk -v arg1="$1" 'match($0, arg1) && /ESTAB/ && /dport=80/ {system("/usr/sbin/conntrack -D --orig-src " $1 " --orig-dst " substr($6,5) " -p tcp --orig-port-src " substr($7,7) " --orig-port-dst 80")}'