读取 bash 命令结果
reading a bash command result
我曾经使用在以前的 awesome wiki 中找到的“execute_command
”。此命令使用 io.popen
和 lines
方法来 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
的东西都这样做 在 回调被调用之后。最简单的方法是在回调中添加该代码。
我曾经使用在以前的 awesome wiki 中找到的“execute_command
”。此命令使用 io.popen
和 lines
方法来 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
的东西都这样做 在 回调被调用之后。最简单的方法是在回调中添加该代码。