我如何 运行 在 bash 中以 root 身份在命令行上进行 for 循环

How do I run a for loop on the command line as root in bash

我正在尝试 运行 一个简单的 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: syntax error near unexpected token `do'

如果我省略最后的 ;(分号)

,则会出现与上述相同的错误

将命令括在 "(双引号)中会得到以下结果:

sudo: for drive in a b c d e f g; do hddtemp /dev/sdg; done: command not found

用反引号括起命令 (`)

sudo "`for drive in a b c d e f g; do hddtemp "/dev/sd$drive"; done`" 

为指定的驱动器 letter/spec 的每个实例给出错误:

/dev/sda: open: Permission denied followed by sudo: : command not found

是否可以 运行 for(或其他循环)命令作为命令行单行 sudo'ing 或以其他方式在 bash 中使用我的根凭据?

Ubuntu linux 16.04LTS / GNU bash 4.3.46(1)

我建议:

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'

不要将 sudo 放在 for 循环之前。以下工作正常。

for drive in {a..g}; do sudo hddtemp "/dev/sd$drive"; done

其他答案告诉您如何解决使用 sudo 循环命令的问题。但是,您实际上并不需要循环,因为 hddtemp 显然可以接受多个参数,因此您可以只执行

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}