我打算将程序的输出通过管道传输到while read VAR
循环中,并break
在找到模式时,但事实并非如此。
概念证明:
inotifywait -qm -e create . | while read line; do echo $line; break; done
./ CREATE newfile
Run Code Online (Sandbox Code Playgroud)
..
tail -f /var/log/syslog | while read line; do echo $line; break; done
Nov 6 22:44:05 section9 ntpdate[2381]: adjust time server 91.189.89.199 offset 0.272779 sec
Run Code Online (Sandbox Code Playgroud)
无论源程序输出什么,这些都永远不会退出。set -x
预先设置表明循环永远不会迭代到第二个read
。$BASH_SUBSHELL
在这些示例中为 1。
tail
、inotifywait
、 等不应该接收 SIGPIPE 并退出吗?
请注意,进程替换 ( while read ... break; done < <(tail -f ...)
) 工作正常。$BASH_SUBSHELL …
我已经使用nethogs
了一段时间了,sudo
每次都必须使用,同时ping
设置了 setuid 位。今天我为 nethogs 设置了它并且它有效:
$ ls -l $(which nethogs) $(which ping)
-rwxr-xr-x 1 root root 64496 Nov 2 2011 /usr/sbin/nethogs
-rwsr-xr-x 1 root root 44168 May 7 17:21 /bin/ping
$ sudo chmod u+s $(which nethogs)
$ ls -l $(which nethogs)
-rwsr-xr-x 1 root root 64496 Nov 2 2011 /usr/sbin/nethogs
$ nethogs
Run Code Online (Sandbox Code Playgroud)
你能想到什么理由不这样默认安装吗?