Переменная сцепления в строке bash - PullRequest
0 голосов
/ 28 марта 2012

Я убиваю процесс в порту 4444, но это может измениться, у меня есть порт в переменной PORT, но я не могу найти, как поместить это в инструкцию

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

Я пытался с:

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

Но это не работает

Ответы [ 4 ]

1 голос
/ 28 марта 2012

Переменные оболочки не раскрываются в одинарных кавычках, но вам не приходится прибегать к двойным кавычкам и их чрезмерному экранированию.Просто выйдите из строки в одинарных кавычках!

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

Посмотрите, как ${PORT} следует за закрывающей кавычкой из первой половины и предшествует начальной кавычке из второй половины.

1 голос
/ 28 марта 2012

Переменные оболочки не раскрываются оболочкой в ​​одинарных кавычках.Вам нужно будет окружить вашу awk-программу двойными кавычками " и сделать еще больше экранирования вложенной программы, потому что bash будет интерпретировать все эти встроенные $ как расширения переменных.

0 голосов
/ 28 марта 2012

Используйте двойные кавычки и избегайте других '$'.

0 голосов
/ 28 марта 2012

Переменные не раскрываются в одиночных кавычках (').Попробуйте двойные кавычки (").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...