【问题标题】:Bash script is not being executed on .lua, exit status 7 (Arg list too long)Bash 脚本未在 .lua 上执行,退出状态 7(参数列表太长)
【发布时间】:2019-09-25 07:17:20
【问题描述】:

.lua 文件正在执行,因为我在日志中看到了来自 m.log() 的字符串,但 bash 代码没有被执行。为什么?有什么我想念的吗?此外,os.execute() 中的命令的日志中也没有错误。

#!/usr/bin/lua

function main()
m.log(1,"Starting script execution \n")
os.execute ("route add xx.xxx.xxx.xxx reject")
## i also tried os.execute ("/path/to/file.sh") and giving permision to execute with chmod +x filename.sh
m.log(1,"Script execution finished\n")
end

注意:我直接在我的命令提示符中执行了来自os.execute()的命令,并且IP被添加到了route,所以我的lua代码有问题......

我将具有.lua.sh 文件的文件夹/文件的权限更改为777,只是为了测试它是否是权限问题,没有任何改变,我还尝试更改所有者和用户组。

编辑 - 这个波纹管不起作用,因为它位于/root/ 文件夹中,所以我需要将其移至/var/www/

os.execute ("/path/to/file.sh")

但是 bash 代码没有被执行,os.execute 正在返回退出状态 7(Arg 列表太长),我搜索了一下,我意识到这是因为整个 bash 代码都在引号内执行:@ 987654321@

我该如何解决?

【问题讨论】:

  • os.execute() 中尝试/sbin/route 而不是route
  • @EgorSkriptunoff 没用,我目前面临的问题是退出状态 7(参数列表太长)
  • 试试os.execute ("/bin/bash /path/to/file.sh")
  • 问题是因为我需要用sudo执行.sh,而且它没有root权限。

标签: bash shell lua


【解决方案1】:

您应该检查os.execute 的结果,因为它会将命令的退出状态作为结果之一返回。

您也可以使用io.popen 运行您的脚本并检查生成的输出。

【讨论】:

  • pastebin.com/raw/YB3QGurH 这是退出状态吧?那我该怎么办呢?它没有显示错误。关于io.open 我试过这个stackoverflow.com/a/9676174/10286151,我还尝试了我在论坛中找到的其他方法,没有一个有效。
  • When called without a command, os.execute returns a boolean that is true if a shell is available. 我确实检查了它,它返回了 true。但我不知道shell is available 应该是什么意思
  • 看起来像退出状态,但我会打印从os.execute 返回的所有值。你在什么操作系统上?假设 1792 需要除以 256,看起来返回的实际错误是 7,即“Arg 列表太长”(通过 www-numi.fnal.gov/offline_software/srt_public_context/WebDocs/…),但这似乎不适合您的情况。
  • pastebin.com/raw/LnQk9wj3 我做了同样的事情,但使用.sh 文件的路径,退出代码是 32256%256 = 126,并且在您的链接上,列表错误范围是 1-124,我的操作系统是 ubuntu 16。我还测试了这段代码stackoverflow.com/a/23833013/10286151 退出代码似乎是正确的,当我将 bash 代码直接放入函数 io.open 时,退出代码是 7
  • "如果找到命令但不可执行,则返回状态为 126。"根据gnu.org/software/bash/manual/html_node/Exit-Status.html
猜你喜欢
  • 2019-03-25
  • 2015-04-30
  • 2013-12-09
  • 2018-04-02
  • 2016-09-11
  • 2021-03-28
  • 1970-01-01
  • 2016-07-29
  • 1970-01-01
相关资源
最近更新 更多