读取 bash 命令结果

reading a bash command result

我曾经使用在以前的 awesome wiki 中找到的“execute_command”。此命令使用 io.popenlines 方法来 return 命令的结果。
现在,文档的建议是避免 io.popen

我的 rc.lua 使用 io.popen 将主机名的计算机分配给变量 ordinateur(我试图为两台完全不同的计算机维护唯一的 rc.lua)。

我曾经有过这条线: 纵坐标=execute_command("hostname") 我将其替换为:

awful.spawn.easy_async_with_shell( "hostname" ,    
   function(stdout,stderr,reason,exit_code)
       ordinateur = stdout                                                      
   end)

在脚本的后面,我有类似的测试 如果 ordinateur == "asus" 那么 .... 但它失败了。实际上 ordinateur 是 nil
我认为 rc.lua 在 ordinateur 得到它的分配之前被读取,对吗?

那么,我能做什么?我在考虑用 /etc/hostname 文件的读取替换命令,这样更好吗?我将如何使用 awful.spawn.* 命令执行此操作?

谢谢
大卫

尽可能使用 LuaSocket。

> socket = require "socket"
> print(socket.dns.gethostname())
myhost

另一种选择是从启动 window 管理器的脚本中 运行 hostname,并将结果存储在环境变量中。谁知道,如果你幸运的话,它已经在那里了?!

> print(os.getenv("HOSTNAME") or os.getenv("HOST"))
myhost

它稍后在脚本中失败,因为命令是异步的。这意味着它 Awesome 在命令执行期间继续运行,结果稍后可用。

这就是不使用 io.popen 的全部意义所在。 io.popen 将在您的计算机上 停止 一切 [与 X11 相关的内容,包括所有应用程序]。

您需要修改您的代码,以便所有访问 ordinateur 的东西都这样做 回调被调用之后。最简单的方法是在回调中添加该代码。