linux 在bash?中捕获命令输出并进行排序,

j0pj023g  于 2023-03-17  发布在  Linux
关注(0)|答案(2)|浏览(140)

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

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
kyxcudwk

kyxcudwk1#

一个选项是在单独的xterms中启动它们

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

c2e8gylq2#

不完美,但以我有限的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

相关问题