如何使用bash记录Dmidecode结果



我一直在尝试编写一个bash脚本以记录dmidecode在a日志文件中结果。

到现在,这就是我走了多远。

#!/bin/bash
for i in `seq 0 5`; do
sudo su <<HERE
dmidecode -t $i >> system.log 
HERE
done

当我执行上述脚本时,它会要求我的密码。一旦输入密码,我就会收到以下错误6次。

bash: line 1: system.log: Permission denied

任何人都知道如何解决此问题并记录DMidecode详细信息。任何帮助深表感谢。谢谢

您的命令如书面应该工作,但可以简化:

#!/bin/bash
for i in {0..5}; do
  sudo -s <<<"dmidecode -t $i >> system.log"
done

如果以上不起作用,请告诉我们。

  • sudo -s采用 shell 命令执行从stdin [1] 的root执行,因此su不需要;由于该命令很简单,因此我使用此处 - string <<<)而不是此处的文档。
    • 请注意,输出重定向>> system log是命令字符串的一部分 的一部分,否则它将在 current 的上下文中发生用户:
      • sudo -s <<<"dmidecode -t $i" >> system.log 实际产生您描述的错误,如果您在不允许当前用户创建文件的目录中执行该错误。
    • 结果是,由此产生的system.log文件将由root所有。
  • {0..5}使用支撑式扩展来驱动迭代,这更有效。

[1] sudo -s 也接受命令作为附加参数,但是通过这种方式传递的命令仅限于 simple 命令没有重定向,因此在这种情况下它不起作用。
此外,您不能将这样的命令传递为 single 字符串,它需要通过 - 引用 - 单独引用其参数。
旧的 sudo的版本 - 例如在MacOS上找到的10.11- did 允许将整个shell命令行作为a 数传递,但是不应再使用 - 使用STDIN输入。

相关内容

  • 没有找到相关文章

最新更新