Bash 脚本,错误“参数列表太长”

Bash 脚本,错误“参数列表太长”

我需要在.lua文件中运行 bash 脚本:

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

文件.sh:

#!/bin/bash
route add 149.36.98.78 reject

file.sh的权限是[-rwxr-x---] root www-data

我收到错误“Arg list too long”,如果我将 bash 代码直接放入 lua 中,我会收到相同的错误:

os.execute ("route add 149.36.98.78 reject")

所以它认为这是因为整个bash代码是在引号内执行的,参考:https://stackoverflow.com/q/11475221/10286151

这是我的 limit.h 中的常量:

#ifndef _LINUX_LIMITS_H
#define _LINUX_LIMITS_H

#define NR_OPEN         1024

#define NGROUPS_MAX    65536    /* supplemental group IDs are available */
#define ARG_MAX       131072    /* # bytes of args + environ for exec() */
#define LINK_MAX         127    /* # links a file may have */
#define MAX_CANON        255    /* size of the canonical input queue */
#define MAX_INPUT        255    /* size of the type-ahead buffer */
#define NAME_MAX         255    /* # chars in a file name */
#define PATH_MAX        4096    /* # chars in a path name including nul */
#define PIPE_BUF        4096    /* # bytes in atomic write to a pipe */
#define XATTR_NAME_MAX   255    /* # chars in an extended attribute name */
#define XATTR_SIZE_MAX 65536    /* size of an extended attribute value (64k) */
#define XATTR_LIST_MAX 65536    /* size of extended attribute namelist (64k) */

#define RTSIG_MAX     32

#endif

我该如何修复它?我尝试将其更改ARG_MAX为:

ARG_MAX       29107299

但这并没有改变任何事情。我使用Ubuntu 16。

当我搜索这个问题时,我意识到这个问题是由于ARG_MAX, 定义的ARG_MAX是文件/usr/include/linux/limits.h,但我不确定,因为在文件中limits.hARG_MAX131072,但是当我这样做时,getconf ARG_MAX我得到2621440

答案1

错误列表你已经引用过你的粘贴箱正在误导您。

您收到的错误是数字 7,但这是程序退出代码,几乎可以肯定不是系统错误代码。它们完全无关。

我相信实际的问题很简单,您试图添加相同的拒绝路线两次:

# route add 152.48.25.29 reject; echo SS=$?
SS=0
# route add 152.48.25.29 reject; echo SS=$?
SIOCADDRT: File exists
SS=7

route如果您尝试删除不存在的路由,您也会得到相同的退出代码:

# route delete 152.48.25.29 reject; echo SS=$?
SS=0
# route delete 152.48.25.29 reject; echo SS=$?
SIOCDELRT: No such process
SS=7

要解决这个问题,您需要管理您的包装器。您可以在尝试添加拒绝路由之前对其进行测试,或者干脆丢弃错误返回。此示例支持第二种(简单的)方法,但您可能需要采用其他选项:

#!/bin/bash
route add 152.48.25.29 reject 2>/dev/null
exit 0

(您确实知道如何使用 和 朋友向脚本传递和引用参数"$1",而不是逐字嵌入 IP 地址,不是吗?)

相关内容