我正在尝试运行一个简单的for循环来检查并显示几个硬盘的温度,如下所示:
for drive in a b c d e f g; do hddtemp "/dev/sd$drive"; done
如果我su到root,这很有用,但我想在命令行上运行它或其他循环类型的单行命令,如果可能的话,可能需要sudo。
如果我试试
sudo for drive in a b c d e f g; do hddtemp "/dev/sd$drive"; done;
我收到此错误:
bash:意外标记“do”
附近的语法错误
如果我省略最后的;
(分号)
将命令括在"
(双引号)中会得到以下结果:
sudo:用于驾驶汽车;做hddtemp / dev / sdg;完成:命令 找不到
将命令括在后面(`
)
sudo "`for drive in a b c d e f g; do hddtemp "/dev/sd$drive"; done`"
为指定的驱动器号/规格的每个实例提供错误:
/ dev / sda:open:权限被拒绝后跟sudo :: 命令未找到
是否可以将命令行作为命令行运行for(或其他循环)命令,或者在bash中使用我的root凭据?
Ubuntu linux 16.04LTS / GNU bash 4.3.46(1)
答案 0 :(得分:3)
我建议:
for drive in a b c d e f g; do sudo hddtemp "/dev/sd$drive"; done
或
sudo bash -c 'for drive in a b c d e f g; do hddtemp "/dev/sd$drive"; done'
答案 1 :(得分:2)
其他答案告诉您如何解决使用sudo循环命令的问题。但是,你实际上并不需要循环,因为sudo hddtemp /dev/sd{a,b,c,d,e,f,g}
显然可以采用多个参数,所以你可以这样做
sudo hddtemp /dev/sda /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg
(没有引号 - 它们会阻止大括号扩展),扩展为
sudo hddtemp /dev/sd{a..g}
如果您的驱动器确实被称为,那么您可以缩短到
{{1}}
答案 2 :(得分:0)
不要将sudo
放在for
循环之前。以下工作正常。
for drive in {a..g}; do sudo hddtemp "/dev/sd$drive"; done