如何使用bash记录dmidecode结果

时间:2015-05-13 15:06:46

标签: bash logging

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

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

#!/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的详细信息。任何帮助深表感谢。感谢

1 个答案:

答案 0 :(得分:3)

您编写的命令应该可以工作,但可以简化:

#!/bin/bash

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

如果上述方法无效,请告知我们。

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

[1] sudo -s 接受一个命令作为额外的参数,但这样传递的命令仅限于简单命令没有重定向,所以在这种情况下它不起作用。
此外,您无法将此命令作为字符串传递,这需要单独传递 - 并引用 - 其参数。 较早版本的sudo - 例如在macOS上找到的最高10.11 - 确实允许将整个shell命令行作为单个传递参数,但不应再使用 - 使用stdin输入。 功能