在 ubuntu 终端中发出多个命令

在 ubuntu 终端中发出多个命令

我正在使用 ubuntu 18.04 服务器版本并且处于终端中。

# hdparm -I /dev/sd[a-c] | grep "/dev\|level\|Model"

将发行相当于

# hdparm -I /dev/sda | grep "/dev\|level\|Model"
# hdparm -I /dev/sdb | grep "/dev\|level\|Model"
# hdparm -I /dev/sdc | grep "/dev\|level\|Model"

然而

# smartctl --nocheck standby -i /dev/sd[a-c] | grep "Model\|Power"

只会给我

# smartctl --nocheck standby -i /dev/sda | grep "Model\|Power"

并且它不会发出 /dev/sdb 和 /dev/sdc 的命令

我怎样才能达到预期的效果?

谢谢

猕猴桃

答案1

命令扩展以内联方式进行,不会扩展为多个命令。如果您set -x在 shell 中,则可以看到它实际执行的命令。

对于第一个命令

# hdparm -I /dev/sd[a-c] | grep "/dev\|level\|Model"

假设/dev/sda和都存在,/dev/sdb/dev/sdc实际运行的命令将是

# hdparm -I /dev/sda /dev/sdb /dev/sdc | grep "/dev\|level\|Model"

hdparm程序处理多个参数并产生与发出三个单独命令相同的输出。

实际情况是,它smartctl不会处理多个参数,因此最好必须针对这三个设备手动运行该命令。

或者你可以使用循环:

# for arg in /dev/sd[a-c]
> do
>  smartctl --nocheck standby -i "$arg" | grep "Model\|Power"
> done

相关内容