BASH 超时命令作为 xargs 命令

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

这是我在这里的第一篇文章。我是一个爱好者。

我在运行“Raspbian GNU/Linux 10 (buster)”的 RPi4 上。

一条管道获取一堆硬盘的电源状态。但是,在某些驱动器上,hdparm 变得没有响应。

为了尝试解决这个问题,我使用了超时命令,后跟 hdparm 作为管道中 xargs 的参数,但超时现在超时 xargs 而不是 hdparm。

管道工作正常,直到最后一部分是 xargs 命令:

ls -l /dev/disk/by-uuid/ | grep -f /home/dec/drivelist| cut -d '/' -f 3 | xargs -I {} timeout -k 10 8 hdparm -C /dev/{}

( drivelist 是一个 ASCII 文件,每行只有一个磁盘 UUID。)

这将输出以下内容并在 sda2 处超时,它退出并无法继续 xargs。

/dev/sdf1:
 drive state is:  standby

/dev/sdd1:
 drive state is:  standby

/dev/sdg1:
 drive state is:  standby

/dev/sda2:
xargs: timeout: terminated by sig

这里的问题是timeout实际上超时的是xargs而不是hdparm。

我试过:

ls -l /dev/disk/by-uuid/ | grep -f /home/dec/drivelist| cut -d '/' -f 3 | xargs -I {} bash -C "timeout -k 10 8 hdparm -C /dev/{}"

也不能按预期工作并输出:

bash: timeout -k 10 8 hdparm -C /dev/sdf1: No such file or directory
bash: timeout -k 10 8 hdparm -C /dev/sdd1: No such file or directory
bash: timeout -k 10 8 hdparm -C /dev/sdg1: No such file or directory
bash: timeout -k 10 8 hdparm -C /dev/sda2: No such file or directory

我如何使它在管道中工作,避免多行代码?

感谢您的时间和帮助。

vLAd

bash raspberry-pi timeout pipeline xargs
© www.soinside.com 2019 - 2024. All rights reserved.