有没有办法在没有输出缓冲的情况下运行shell命令?
例如,hexdump file | ./my_script只会将缓冲块中的hexdump输入传递给my_script,而不是逐行传递.
实际上我想知道如何使任何命令无缓冲的一般解决方案?
基本上我想知道为什么这不输出任何东西:
tail --follow=name file.txt | grep something | grep something_else
Run Code Online (Sandbox Code Playgroud)
你可以假设它应该产生输出我已经运行了另一行来确认
cat file.txt | grep something | grep something_else
Run Code Online (Sandbox Code Playgroud)
好像你不能多次输出尾巴的输出!?任何人都知道这笔交易是什么,有没有解决方案?
编辑:要回答到目前为止的问题,该文件肯定有grep应显示的内容.作为证据,如果grep是这样做的:
tail --follow=name file.txt | grep something
Run Code Online (Sandbox Code Playgroud)
输出显示正确,但如果使用它:
tail --follow=name file.txt | grep something | grep something
Run Code Online (Sandbox Code Playgroud)
没有显示输出.
如果有帮助我运行ubuntu 10.04
Linux如何确定它将用于进程的下一个PID?这个问题的目的是为了更好地理解Linux内核.不要害怕发布内核源代码.如果顺序分配PID,Linux如何填补空白?当它到达终点时会发生什么?
例如,如果我从Apache运行一个PHP脚本,那么<?php print(getmypid());?>在刷新时会打印出相同的PID几分钟.这段时间是apache接收的请求数量的函数.即使只有一个客户端,PID最终也会改变.
当PID改变时,它将是一个接近的数字,但有多近?该数字似乎并不完全是连续的.如果我这样做,ps aux | grep apache我会得到相当多的过程:

Linux如何选择下一个号码?前几个PID仍在运行,以及最近打印的PID.apache如何选择重用这些PID?
Tail有以下选择:
-f The -f option causes tail to not stop when end of file is reached, but rather to wait for additional data to be appended to the
input. The -f option is ignored if the standard input is a pipe, but not if it is a FIFO.
Run Code Online (Sandbox Code Playgroud)
我只想something在尾部输出中进行grep .
tail -f <FILE> | grep <SOMETHING>
Run Code Online (Sandbox Code Playgroud)
问题是它只运行一次grep并完成.没有其他输出发生.如何让grep正确运行-f?
我有一个容器,该容器在日志中有时会写一个对我来说很重要的关键字,我想在终端中用彩色突出显示该单词,但重要的是仍要实时查看所有内容日志(-跟随)。我刚试过命令
docker logs -f my_app --tail=100 | grep --color -E '^myWord'
Run Code Online (Sandbox Code Playgroud)
但不起作用。
因此,存在一些执行此操作的方法吗?
我试图通过检查日志来调试一个场景,这是我的命令
tail -f eclipse.log | grep 'enimation' | grep -i 'tap'
Run Code Online (Sandbox Code Playgroud)
基本上我想要的是,在所有的线条中,我在其中打印带有enimation的线条,然后在所有动画中,我想看到带有"tap"的动画.
以下是返回空结果的sammple数据
*******enimation error*********TapExpand
*******enimation error*********TapShrink
Run Code Online (Sandbox Code Playgroud)
这将返回空结果.
如果我运行此命令
tail -f eclipse.log | grep -i 'enimation.*tap'
Run Code Online (Sandbox Code Playgroud)
它返回正确的结果.有人可以向我解释一下,上述两个命令之间有什么区别,以及为什么结果会有差异.它们看起来都和我一模一样.
从来没有在bash上编码但需要紧急的东西.对不起,如果这不是常态,但我真的想得到一些帮助.
我有一些抛出到stdout的消息,根据消息类型(消息是一个带有"found"字样的字符串)我需要bash脚本发出蜂鸣声.
到目前为止,我已经想出了这个.
output=$(command 1) # getting stdout stream?
while [ true ]; do
if [ "$output" = "found" ]; then # if the stdout has the word "found"
echo $(echo -e '\a') # this makes the beep sound
fi
done
Run Code Online (Sandbox Code Playgroud)
我不知道在哪里/如何添加grep或awk命令检查具有单词"found"的字符串并且仅返回"found",以便在if条件下它可以检查该单词.
谢谢!
我用
cmd | egrep 'ID|Value'
Run Code Online (Sandbox Code Playgroud)
在我的命令行上输出以下输出:
ID: 2
Value: 21
ID: 1
Value: 25
ID: 1
Value: 22
ID: 3
Value: 56
ID: 1
Value: 23
ID: 2
Value: 50
ID: 2
Value: 56
ID: 3
Value: 11
ID: 3
Value: 26
Run Code Online (Sandbox Code Playgroud)
我想用一个特殊ID过滤它.但是当我使用时:
egrep 'ID: 1|Value'
Run Code Online (Sandbox Code Playgroud)
它将仅使用ID 1显示相同的输出,但显示所有ID的值.
我已经读过关于awk,sed和regex的内容了,但我找不到任何可以帮助我的东西,但我也没那么深入.
有人可以提出一个想法,或者告诉我这是一个错误的方法,我应该采取不同的方式,如何做?
按需输出:
ID: 1
Value: 25
ID: 1
Value: 22
ID: 1
Value: 23
Run Code Online (Sandbox Code Playgroud) 下面的命令每秒生成输出60秒.
sar -n DEV 1 60 | grep lo
Run Code Online (Sandbox Code Playgroud)
如果我将其重定向到文件,则文件sar.log会连续更新,即每秒更新一次
sar -n DEV 1 60 > sar.log &
Run Code Online (Sandbox Code Playgroud)
但是,只要管道然后将其重定向到文件,它就会在文件sar.log完成后填充,即60秒后填充文件.
sar -n DEV 1 60 | grep lo > sar.log &
Run Code Online (Sandbox Code Playgroud)
如何grep和重定向到文件,以便日志文件连续更新,即每秒
我可以使用除grep之外的其他东西,如果它有助于我选择某些内容并每秒重定向到一个文件.