Pipe
顯示命令輸出的最後 n 行
我正在嘗試執行
docker build
命令。我只想連續查看輸出的最後“n”行。例如,通常的 docker build 命令給了我類似的東西:Building myimage Step 1/15 : FROM python:3.6.9 ---> 5bf410ee7bb2 Step 2/15 : WORKDIR / ---> Running in 201dd686c5d9 Removing intermediate container 201dd686c5d9 ---> 298d3c728059 Step 3/15 : COPY . . ---> a47754a932c3 Step 4/15 : RUN chmod 755 /launch/start-script.sh ---> Running in ef27984abecf Removing intermediate container ef27984abecf ---> ae13426f44e9 Step 5/15 : RUN pip install --upgrade pip ... ... ...
所需的輸出
n=3
是Removing intermediate container ef27984abecf ---> ae13426f44e9 Step 5/15 : RUN pip install --upgrade pip
我試著用管道把它拖到尾巴上,
docker build | tail -3
但這會在建構完成後顯示最後 3 行。程序執行時是否可以連續顯示最後的“n”行?
#!/bin/sh i=0 [ "$#" = 1 ] || { >&2 echo "The number of lines should be provided"; exit 9; } nlines=$1 while IFS= read -r line; do clear all="$all $line" i=$((i+1)) if [ "$i" -ge "$nlines" ]; then all="${all#* }" fi printf '%s\n' "$all" done < /dev/stdin
使其可執行(
chmod +x nlines.sh
),然後連續列印 3 行,docker build | ./nlines.sh 3
clear
清除螢幕。每當一行來自標準輸入時,都會這樣做。- 這會將新讀取的行添加到變數
all
:all="$all $line"
[ "$i" -ge "$nlines" ]
測試是否達到了要顯示的最大行數。如果是,
- 這會從變數中刪除最舊的行。
all="${all#* }"