我正在推出一个网站,我想设置一个Bash单行,所以当有人点击该网站时,它会使用内部蜂鸣器发出哔哔声.
到目前为止,它使用以下工作.
tail -f access_log | while read x ; do echo -ne '\007' $x '\n' ; done
Run Code Online (Sandbox Code Playgroud)
Tail跟随access_log并转储到STDOUT,一次获得STDOUT行,用"\ 007""内部蜂鸣声十六进制代码"回显该行,并完成...
这就像一个美女...每次击中都会显示日志中的线条并发出哔哔声...但是,它很快就会烦人,所以理想情况下我想tail -f /access/log在它被管道输入之前过滤它while以便只读取我关心的线条.我认为grep "/index.php"这将是游客的一个很好的迹象......
这就是问题所在......
我可以...
tail -f access_log | while read x ; do echo -ne '\007' $x '\n' ; done
Run Code Online (Sandbox Code Playgroud)
一切都在发出哔哔声,我可以......
tail -f access_log | grep "/index.php"
Run Code Online (Sandbox Code Playgroud)
和页面显示没有蜂鸣声,但当我这样做
tail -f access_log | grep "/index.php" | while read x ; do echo -ne '\007' $x '\n' ; done
Run Code Online (Sandbox Code Playgroud)
什么都没发生,没有来自日志的行,没有发出哔哔声.
我认为grep在某个地方搞乱了,但我无法弄清楚在哪里.我喜欢它是一个单行,我知道它应该在脚本中完成并且会更容易,但它并不能解释为什么我认为应该工作的上述内容不是.
Joh*_*ica 14
Grep的输出在管道中使用时会被缓冲.使用--line-buffered强制它使用行缓冲,因此立即输出线.
tail -f access_log | grep --line-buffered "/index.php" | while read x ; do echo -ne '\007' $x '\n' ; done
Run Code Online (Sandbox Code Playgroud)
您还可以将grepand while循环组合到一个awk调用中:
tail -f access_log | awk '/\/index.php/ { print "\007" $0 }'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1549 次 |
| 最近记录: |