我如何 运行 在 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}
我正在尝试 运行 一个简单的 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}