我开始使用在后台下载一个大文件
$ nohup wget http://example.tld/big.iso &
这还给了我一个nohup.out
包含wget
.
现在,如果我稍后想观看下载过程,我可以使用$ tail -f nohup.out
但是它填满我的终端窗口的速度比我希望的要快。我希望看到的是最后一行不断更新(就像wget
单独使用时一样)。
我尝试过$ tail -n 1 -f nohup.out
,但它似乎只影响最初的尾部。
一般来说,如果可以限制(在本例中为 1)命令输出可用/可见的行数,则可以解决此问题。有点像将输出放在圆形缓冲器- 想想正常的进度条$ wget example.tld/big.iso
会打印出来。
有这样的解决办法吗?
还是我爬树的方式不对? (意思是,限制 的nohup
输出或做其他事情会更容易吗?)
答案1
如果您不想限制滚动区域(请参阅我的其他答案),您还可以在打印下一行之前使用回车符返回到行首。有一个转义序列可以清除该行的其余部分,当当前行比前一行短时,这是必需的。
nohup wget http://cdimage.debian.org/debian-cd/6.0.3/amd64/iso-dvd/debian-6.0.3-amd64-DVD-1.iso &
el="$(tput el)"; # Clear to the end of the line
tail -n 1 -f nohup.out | while read -r line; do echo -n $'\r'"$el$line"; done;
答案2
您可以watch
在这里使用:
watch -n 0.5 -e "tail -n 1 nohup.out"
编辑:-e
(alias --exec
) 选项在这里看起来很合适。特别是如果您的目标是以非常小的间隔运行,这会减少每个周期内部watch
运行所造成的开销。sh -c
watch
答案3
有一定的Xterm 控制序列您可以使用它来限制终端滚动的行数。查找“设置滚动区域”。不过,这有点杂乱。请务必在之后重置您的终端:
nohup wget http://cdimage.debian.org/debian-cd/6.0.3/amd64/iso-dvd/debian-6.0.3-amd64-DVD-1.iso &
clear; echo -n $'\e[1;2r'; tail -f nohup.out | grep --line-buffered .
# The "grep" line is to ensure a single line; you can also use "awk 1" or "sed" etc.
答案4
如果您不希望输出占据整个当前终端窗口,您可以使用一个简单的while
循环:
while true; do
XXX=$( tail -n1 my.log )
echo -en " \r$XXX\r"
sleep 0.5
done; echo