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.hlimits.hARG_MAX131072getconf ARG_MAX2621440

答え1

これエラーリストあなたはすでに引用していますはい貼り付けボックスあなたを誤解しています。

表示されるエラーは数字7ですが、これはプログラム終了コードであり、システムエラーコードではないことはほぼ確実です。彼らはまったく関係がありません。

実際の問題は簡単だと思います。同じ拒否パスを2回追加しようとしています。

# 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

この問題を解決するには、ラッパーを管理する必要があります。拒否パスを追加する前に、これをテストしたり、単にエラーの返却を削除したりできます。この例は2番目の(簡単な)アプローチをサポートしていますが、他のオプションを選択することもできます。

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

"$1"(あなたはIPアドレスをそのまま挿入するのではなく、スクリプトにパラメータを渡して引用する方法を知っていますか?)

関連情報