我一直在尝试编写一个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的详细信息。任何帮助深表感谢。感谢
答案 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输入。
功能