直接使用arp的命令就可以,不用使用arp的一个复杂命令,这个复杂命令使用的是awk和arp的管道命名
arp -n|awk '/^[1-9]/{system("arp -d "$1)}'
这个命令在MAC上运行不成功,主要的原因是arp的指令,在MAC OS上,-n 选项,这样是执行不成功的,需要跟其他的选项联合使用,不可以单独使用,-n选项只是指定一个显示的格式。可以配合a选项执行。
即使-a选项,其输出的格式,满足不了awk的使用格式。awk是一种语言的书写格式,使用两个单引号作为命令的分割,是pattern + command的模式,模式使用//两个分割符包围,这里面的表达式,可以是正则表达式,也可以是关系表达式等,后面的命令,是一些常见的命令,如print, system等,
awk的主要作用是,对于输入文件或者是其他命令的输出的每一行文本,执行pattern,并使用分隔符分割该条输入,如
? (192.168.1.252) at d0:67:e5:ec:53:cc on en0 ifscope [ethernet]
就会被分割成类似于一个数组,真正的分割内容是
?
(192.168.1.252)
at
d0:67:e5:ec:53:cc
on
en0
ifscope
[ethernet]
程序中可以使用$n直接访问,?是$1,(192.168.1.252)是$2,一次类推。。。
有一个匿名变量$0是存放的该条记录,即一行的数据,当热还必须是满足pattern的时候才会有值。
所以根据上面分析的获取的$1,根本就没有值,而且,即使使用其他的pattern,或者不使用pattern,得到的是(192.168.1.252),而不是192.168.1.252,所以,后续的命令根本没法执行。
其实,MAC OS下,可以使用一个简单的命令就可以完成清空ARP缓存的目的
arp -ad
既可以删除ARP缓存,这个命令的运行权限是root用户。