我有一个lua REPL,并且希望在HTTPS://URL
上运行一个以纯文本形式存储的lua脚本文件。我知道os.execute()
可以运行OS命令,所以我们可以使用curl
等获取脚本,然后load()
。 lua REPL中只有一行可行吗?Oneliner从在线(Gist)加载Lua脚本并在当前上下文中运行
2
A
回答
2
注:如果你打算从网络上直接运行的源代码,至少使用
https
,避免容易MITM攻击。
为了给这个问题的答案,因为叶戈尔可能不会发布它是这样:
(loadstring or load)(io.popen("wget -qO- https://i.imgur.com/91HtaFp.gif"):read"*a")()
对于为什么这个打印Hello world
:
loadstring or load
是要与不同的Lua版本兼容,因为功能loadstring
和load
在某个时候合并(我相信5.2)。 io.popen
在shell中执行它的第一个参数并返回一个文件指针到它的stdout。
从叶戈尔的“GIF”是不是一个真正的GIF(在浏览器中打开此:view-source:https://i.imgur.com/91HtaFp.gif
),但包含该文本的纯文本文件:
GIF89a=GIF89a
print'Hello world'
基本上是一个GIF与GIF89a
和=GIF89a
开始之后只是为了生成有效的Lua,这意味着您不必使用imgur或gif,您也可以使用原始gist或github。现在
,这是相当不可能的os.execute
是在沙箱中时可用io.popen
不大,但如果是这样,就可以实现一个班轮使用os.execute
(虽然大幅更长)和临时文件
让我们第一次写这一点,因为在单行这将是一个有点复杂:
(function(u,f)
-- get a temp file name, Windows prefixes those with a \, so remove that
f=f or os.tmpname():gsub('^\\','')
-- run curl, make it output into our temp file
os.execute(('curl -s "%s" -o "%s"'):format(u,f))
-- load/run temp file
loadfile(f)()
os.remove(f)
end)("https://i.imgur.com/91HtaFp.gif");
你可以轻松地凝聚到这一条线通过删除注释,制表符和换行符:
(function(u,f)f=f or os.tmpname():gsub('^\\','')os.execute(('curl -s "%s" -o "%s"'):format(u,f))loadfile(f)()os.remove(f)end)("https://i.imgur.com/91HtaFp.gif");
相关问题
- 1. 在Magma中加载并运行脚本;
- 2. 在运行时加载脚本并确保加载脚本
- 3. Lua脚本是在执行前加载到内存中的吗?
- 4. 在文档加载中运行脚本
- 5. 节点脚本如何在我当前的bash上下文(进程)中运行?
- 6. 在Docker中运行Lua脚本
- 7. 从另一个lua脚本加载lua脚本
- 8. Lua问题 - 在运行之前加载库文件
- 9. 如何从pycharm在django上下文中运行脚本
- 10. 首先加载脚本文件,在加载之前在div上执行
- 11. 我可以在ViM中运行当前脚本或脚本吗?
- 12. Spring:在加载持久化上下文之前运行代码
- 13. 与AWK猛砸oneliner在终端运行而不是在脚本
- 14. 在bash脚本中从当前终端运行命令
- 15. NiFi-1.0.0 - 加载lua脚本
- 16. 如何从网上下载.exe文件并用一些脚本运行它?
- 17. 从c运行整个lua脚本
- 18. 如何运行.lua脚本?
- 19. 如何运行Lua脚本?
- 20. 运行下载脚本
- 21. 从Ruby脚本创建Gist
- 22. 当div加载时无法运行jquery脚本,在DOM加载之前运行jquery代码
- 23. 文件下载后运行脚本
- 24. 在线运行ruby脚本
- 25. 在页面加载时运行脚本
- 26. 在页面加载运行角脚本
- 27. jquery:在ajax加载后运行脚本()
- 28. 上加载运行脚本DropDownListFor
- 29. 如何在Java中运行bash脚本(下载文件)?
- 30. 如何在当前类的上下文中运行IRB.start
'(loadstring或load)(io.popen(“wget -qO- http://i.imgur.com/91HtaFp.gif”):读取“* a”)()' - 此程序将打印“你好世界“ –
这个程序在做什么并不明显。我发现它运行wget的gif并加载该gif作为代码,并以某种方式神奇地做世界你好吗? – hyiltiz
另外,当我尝试在我的REPL中运行它时,它失败了:输入:1:尝试调用一个零值(字段'popen')。也许我的REPL受限制?它是更大程序的一部分,作为嵌入式模块。 'io.open'和'io.stdout'似乎也能工作。 – hyiltiz