Shell 读取bash命令结果
我曾经使用在以前的awesome wiki中找到的“Shell 读取bash命令结果,shell,lua,awesome-wm,Shell,Lua,Awesome Wm,我曾经使用在以前的awesome wiki中找到的“execute\u命令””。此命令使用io.popen和lines方法返回命令的结果。 现在,医生的建议是避免io.popen 我的rc.lua使用io.popen将主机名的计算机分配给一个可变坐标(我正试图为两台完全不同的计算机维护一个唯一的rc.lua) 我曾经说过这样一句话: 纵坐标=执行_命令(“主机名”) 我将其替换为: awful.spawn.easy_async_with_shell( "hostname" , fu
execute\u命令”
”。此命令使用io.popen
和lines
方法返回命令的结果。现在,医生的建议是避免
io.popen
我的rc.lua使用io.popen
将主机名的计算机分配给一个可变坐标(我正试图为两台完全不同的计算机维护一个唯一的rc.lua)
我曾经说过这样一句话:
纵坐标=执行_命令(“主机名”)
我将其替换为:
awful.spawn.easy_async_with_shell( "hostname" ,
function(stdout,stderr,reason,exit_code)
ordinateur = stdout
end)
在脚本中,我有如下测试
如果纵坐标==“asus”,则。。。。
但它失败了。实际上,纵坐标为零我认为rc.lua是在Orderiour得到它的任务之前阅读的,对吗 那么,我能做什么?我想用读取
/etc/hostname
文件来替换命令,这样更好吗?我将如何使用可怕的.spawn.*命令执行此操作
谢谢你David如果可能,请使用LuaSocket
> socket = require "socket"
> print(socket.dns.gethostname())
myhost
另一个选项是从启动窗口管理器的脚本运行hostname
,并将结果存储在环境变量中。谁知道,如果你幸运的话,它已经在那里了
> print(os.getenv("HOSTNAME") or os.getenv("HOST"))
myhost
该命令稍后在脚本中失败,因为该命令是异步的。这意味着它将在命令执行期间继续运行,稍后将提供结果 这就是不使用io.popen的全部要点
io.popen
将在执行X11时停止计算机上的一切[与X11相关,包括所有应用程序]
您需要修改代码,以便所有访问
ordinatiur
的东西在调用回调后都这样做。最简单的方法是在回调中添加代码。或print(os.getenv(“主机名”)或os.getenv(“主机”)
实际上,我使用os.getenv
得到nil
,我不想创建环境变量。所以我选择了你的LuaSocket解决方案。我已经把你的代码放在我的rc.lua的顶端了,它正在做这个工作!谢谢lhf,太好了-我已经在答案中添加了这个。大卫,很高兴LuaSockets解决方案对你有效!这应该是io.popen的有效用法。你可以忽略这里的文档。