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"行を引き続き表示できますか?
ベストアンサー1
#!/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
実行可能にして(chmod +x nlines.sh
)、3行を連続して印刷します。
docker build | ./nlines.sh 3
clear
画面を消去します。これは、行が標準入力から出るたびに行われます。これにより、新しく読み取った行が変数に追加されます
all
。
all="$all
$line"
[ "$i" -ge "$nlines" ]
表示する行の最大数に達したかどうかをテストします。の場合、- これにより、変数から最も古い行が削除されます。
all="${all#*
}"