Lua中关闭操作系统的Linux OS执行命令 - 帮助新手理解

时间:2014-02-06 18:54:11

标签: linux lua

如果用户无法正常访问系统,我在Lua中使用以下命令字符串来关闭我的Linux系统:

os.execute 'sleep 5 && echo password | sudo -S poweroff'

我知道以下内容:

os.execute =执行OS命令的简单Lua命令。 睡眠5 =在执行下一个命令之前暂停“X”时间。 && = AND(简单且有很多含义但是这个例子,做&&的两边)。 echo = Linux中Lua版本的“打印”。

但请帮助我了解其余部分。我知道sudo意味着什么,但为什么root密码 之前 “sudo”?为什么管道消除器?为什么在sudo中使用“-S”,这意味着Linux中的Stdin?

还有另一种方法可以让Lua中的脚本关闭/重启操作系统吗?

2 个答案:

答案 0 :(得分:1)

管道将|之前的命令的标准输出重定向到|之后的命令的标准输入。

因此,echo password输出password,用作sudo -S poweroff的标准输入。并从sudo手册

  

‑S(stdin)选项使sudo从标准输入而不是终端设备读取密码。密码必须后跟换行符。

sudostdin读取密码,在这种情况下,恰好是echo password的输出。

答案 1 :(得分:1)

让我们分一杯羹:

  1. sleep 5:阻止5秒
  2. &&:只有这样成功(它会!) - 又是另一个含义 “和”
  3. echo password:写密码
  4. |:无论之前的命令输出是什么(在这种情况下是 密码),不要写出来,但用它作为输入 下一个命令......管道是什么,当一件事情出来的时候 导入下一件事; - )
  5. sudo -S:充当系统管理员,但不要求 密码(那里没有人),而是使用来自的密码 标准输入作为密码
  6. poweroff:这是以系统管理员身份运行的命令
  7. 总结:等待5秒后,将密码提供给sudo,执行poweroff