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

我正在 Lua 中使用以下命令字符串,在用户无法正确访问系统时关闭 Linux 系统:

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

我知道以下内容:

os.execute = 执行操作系统命令的简单 Lua 命令。 sleep 5 = 在执行下一条命令之前暂停“X”时间。 && = AND(简单且有很多意义,但在此情况下,执行 && 两侧的命令)。 echo = Linux 中的“print”版本在 Lua 中使用。

但请帮我理解剩下的部分。我知道 sudo 的意思,但为什么根密码位于 "sudo" 之前?为什么要使用管道分隔符?为什么在 Linux 中与 sudo 一起使用“-S”表示 Stdin?

有没有另一种在 Lua 中编写脚本来关闭/重新启动操作系统的方法?

点赞
用户1009479
用户1009479

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

因此,echo password 输出 password,作为 sudo -S poweroff 的标准输入使用。从 sudo 手册中可以看到:

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

它使得 sudo 从标准输入读取密码,在本例中,正好是 echo password 的输出。

2014-02-06 19:02:06
用户1100552
用户1100552

让我们分解一下:

  1. sleep 5 :阻塞5秒钟
  2. && :而且只有这个成功了(它会成功!) - “和(and)”的另一种含义
  3. echo password:写入密码
  4. | :无论前面的命令输出什么(在这种情况下是密码),不要将其写出,而是将其用作下一个命令的输入…一个管道就是当一个东西出现时,将它定向到下一个对像 ;-)
  5. sudo -S :充当系统管理员,但不要求密码(没有人在那里),而是使用标准输入中来自的所有内容作为密码
  6. poweroff :这是由系统管理员执行的命令

总结:等待5秒后,将密码提供给sudo,然后执行poweroff。

2014-02-06 19:02:21