我一直在尝试编写一个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输入。