我想维护一个文件,其中包含自从看到与 tcpdump 过滤器匹配的数据包以来的秒数。目的是确定健谈的客户端何时不再连接网络。当我不再看到 MDNS 垃圾时,我很确定它已经消失了。
sudo tcpdump -l -tttt -i wlan0 port 5353 and src <hostname> | cut -c -19 | xargs -0 -n1 ./timesec.sh
是我到目前为止所得到的。timesec.sh
将使用 a 中的输入参数date -d
与文件中存储的日期进行比较,然后更新文件的秒数。
然而它不起作用,我怀疑输出cut
没有像我预期的那样通过管道传输。
答案1
我认为您需要-0
从 xargs 命令行中删除 。用于-0
通过空终止来分隔字段,据我所知,cut
不支持这一点。相反,我建议使用-d '\n'
在换行符处终止字段:
... | cut -c -19 | xargs -d '\n' -n1 ./timesec.sh
来自文档
-0
输入项以空字符而不是空格终止,并且引号和反斜杠并不特殊(每个字符均按字面意思理解)。禁用文件结尾字符串,该字符串的处理方式与任何其他参数一样。当输入项可能包含空格、引号或反斜杠时很有用。 GNU find -print0 选项生成适合此模式的输入。
--分隔符=delim
-d 德利姆
输入项以指定字符结束。引号和反斜杠并不特殊;输入中的每个字符均按字面意思处理。禁用文件结束字符串,该字符串的处理方式与任何其他参数一样。当输入仅由换行符分隔的项目组成时,可以使用此选项,尽管在可能的情况下设计程序以使用 --null 几乎总是更好。指定的分隔符可以是单个字符、C 样式字符转义符(例如 \n)或者八进制或十六进制转义码。八进制和十六进制转义码被理解为 printf 命令。不支持多字节字符。