这是我在这里的第一篇文章。我是一个爱好者。
我在运行“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