我想杀死指定端口(variables)的进程
export PORT=3030 netstat -ntlp | awk '$4~/:*${PORT}$/{gsub(/\/.*/,"",$NF);cmd="kill -9 "$NF;system(cmd)}'
但可变的PORT没有得到的命令。
使用lsof执行此任务:
PORT=3030 kill $(lsof -t -ni:$PORT)
尝试使用双引号来包装awk命令而不是单引号。 Bash不会replace单引号内的variables。
您需要将命令内的双引号改为单引号,或者用反斜杠进行转义。
添加到以前的答案,只是为了显示一种方法来解决你的方法:
netstat -ntlp | awk '$4 ~ PORT {gsub(/\/.*/,"",$NF);cmd="kill -9 "$NF;system(cmd)}' PORT='3030'
要么
export PORT=3030 netstat -ntlp | awk '$4~ ENVIRON["PORT"] {gsub(/\/.*/,"",$NF);cmd="kill -9 "$NF;system(cmd)}'
单引号要求shell不加任何改变地传递封闭的string。 所以${PORT}没有被翻译成3030.它只是一堆字符和其他string一样。
使用这个: '$4~/:*'${PORT}'$/{gsub(/\/.*/,"",$NF);cmd="kill -9 "$NF;system(cmd)}'
您只需在${port}之前closures单引号,然后重新打开(不带任何空格)。 这将允许shell转换你的variables。