在 bash 中捕获和排序命令输出?

问题描述 投票:0回答:2

要重新格式化一些磁盘,我使用以下脚本:

for i in {1..7};
do
echo -e "\e[33mFormat Disk: /dev/sg$i"
echo -e "\e[39m---------------------------"
sg_format -v --format --size=512 /dev/sg$i &
done

命令

sg_format
可以以所有 7 个磁盘并行格式化的方式启动,但是当报告格式化过程的进度(以 % 为单位)时,控制台上的输出现在是一团糟。

我可以改为序列化,但 (hdd) 磁盘的格式将花费很长时间。 有没有一种简单的方法来捕捉每次跑步的进度

sg_format
并像这样整理他的:

echo "status sg_format on disk /dev/sg$i"
--> output progress from sg_format
linux bash capture
2个回答
0
投票

一个选择是单独启动它们

xterms

xterm -e "sg_format -v --format --size=512 /dev/sg$i; sleep 30 &

0
投票

不完美,但以我有限的 bash 知识,一个可以接受的解决方案:

sgFormatCount=0
sgFormatCount=$(pgrep sg_format | wc -l)


if [ $sgFormatCount = 0 ]
then
  for i in {1..7};
   do
    sg_format --format --size=512 /dev/sg$i &
  done
fi

一旦 sg_format 在所有磁盘上启动,监控运行进度:

while true;
 do
  for i in {1..7};
   do 
    sg_format -v  /dev/sg$i
  done
 sleep 60
done
© www.soinside.com 2019 - 2024. All rights reserved.