Shell 读取bash命令结果

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

我曾经使用在以前的awesome wiki中找到的“
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的有效用法。你可以忽略这里的文档。