0

イムポート4444でプロセスを殺すが、これは変更することができ、私は、変数PORTでのポートを持っている、しかし、私はを連結変数

netstat -ntlp | awk '$4~/:*4444$/{gsub(/\/.*/,"",$NF);cmd="kill -9 "$NF;system(cmd)}' 

命令でこれを置く方法を見つけるカントI試してみました:

netstat -ntlp | awk '$4~/:*${PORT}$/{gsub(/\/.*/,"",$NF);cmd="kill -9 "$NF;system(cmd)}' 

しかし、それは

答えて

1

シェル変数はシングルクォーテーションでは展開されませんが、ではダブルクォートとその過剰エスケープに頼らざるを得ません。一重引用符で囲まれた文字列から抜け出すだけです!

netstat -ntlp | awk '$4~/:*'${PORT}'$/{gsub(/\/.*/,"",$NF);cmd="kill -9 "$NF;system(cmd)}' 

${PORT}は前半から近い引用符に追従し、下期から開始引用符の前にどのように参照してください。

+0

ありがとう、私は知っていなかったcliのシングルクォートとダブルクォートについては、 – user115561

0

変数は、単一引用符で囲まれた(')の文字列に展開されていない仕事をdoesnt。二重引用符(")を試してください。

1

シェル変数は、シェルによって単一引用符で囲まれていません。 awkプログラムをと二重の引用符"で囲む必要があります.bashは埋め込まれたすべてのものを可変拡張として解釈するため、束縛されたプログラムをさらにエスケープします。

+1

おそらく、その文字列の中に*と引用符を展開する必要があります。 Bashの文字列のエスケープについてはこちらをご覧ください:http://wiki.bash-hackers.org/syntax/quoting – Alex

+0

私は他の$の前に\を置いていました。古いものは、netstat -ntlp | awkのように " (cmd)} \ "$ \〜4 \/\ * $ PORT $/{gsub(/\/.*/,\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\" – user115561

0

二重引用符を使用し、他の '$'をエスケープします。

関連する問題