0

Im den Prozess im Hafen 4444 zu töten, aber das kann sich ändern, habe ich den Port in einer Variablen PORT, aber ich kann nicht finden, wie dies in derConcatenate Variable in String bash

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

I haben versucht, mit:

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

Aber es funktioniert nicht in einfachen Anführungszeichen (') Strings

Antwort

1

Shell-Variablen werden nicht in einfache Anführungszeichen erweitert, aber Sie müssen nicht auf doppelte Anführungszeichen und ihre übermäßige Entweichen zurückgreifen. Verlassen Sie einfach die Zeichenfolge in Anführungszeichen!

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

Sehen Sie, wie ${PORT} das close-Zitat aus der ersten Hälfte folgt, und geht das Start-Zitat aus der zweiten Hälfte.

+0

Dank ich wusste das nicht über einzelne und doppelte Anführungszeichen auf CLI, bin neu auf diesem, – user115561

0

Variablen werden nicht erweitert arbeiten. Versuchen Sie doppelte Anführungszeichen (").

1

Shell-Variablen werden nicht in einfachen Anführungszeichen durch die Shell erweitert. Sie müssen Ihr awk Programm mit double Anführungszeichen " umgeben, und tun Sie eine Menge mehr des beiliegenden Programms, weil bash alle diese eingebetteten $ als variable Erweiterungen interpretiert.

+1

Sie müssen wahrscheinlich auch die * und Anführungszeichen innerhalb dieser Zeichenfolge erweitern. Siehe hier für weitere Informationen zu Bash string escape: http://wiki.bash-hackers.org/syntax/quoting – Alex

+0

Ich habe versucht, \ vor den anderen $ zu setzen, und das alte ", so, netstat -ntlp | awk" \ $ 4 ~ /: \ * $ PORT $/{gsub (/\/.*/,\"\", \$ NF); cmd = \ "kill -9 \" \ $ NF; system (cmd)} " – user115561

0

Verwenden Sie doppelte Anführungszeichen und das andere "$".