我正在尝试在脚本中进行检查以验证是否有进程正在侦听端口。
我尝试使用,ss
但它似乎总是生成 0 作为退出代码,即使表达式也不匹配。
在此主机上,我有一个服务正在侦听端口 53 ,它匹配并具有退出代码 0
$ ss -ntl sport = :53 ; echo $?
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 5 127.0.1.1:53 *:*
LISTEN 0 5 127.0.0.1:53 *:*
LISTEN 0 5 ::1:53 :::*
0
如果我将端口更改为 54(没有任何监听),则退出代码始终保持为 0
$ss -ntl sport = :54 ; echo $?
State Recv-Q Send-Q Local Address:Port Peer Address:Port
0
我查了手册,没有关于退出代码的内容。
我做错了什么还是这种行为正确?
在 ubuntu 16.04 和 centos 7 上测试
答案1
此行为是正常的,ss
不会更改其退出代码来指示过滤器是否匹配任何内容。
如果你想测试ss
结果,你需要用其他工具对它们进行后处理,例如 grep
(它会根据是否匹配更改其退出代码):
ss -ntl sport = :53 | grep -q :53; echo $?