次のように実行するために使用する test.sh というスクリプトがあります。
/root/test.sh
その後、以下のように警告とともにshcコンパイラを使用してこのスクリプトをコンパイルしようとしました。
shc -v -r -T -f test.sh
shc: WARNING!!
Scripts of length near to (or higher than) the current System limit on
"maximum size of arguments to EXEC", could comprise its binary execution.
In the current System the call sysconf(_SC_ARG_MAX) returns -1 bytes
and your script "test.sh" is 155201 bytes length.
shc shll=sh
shc [-i]=-c
shc [-x]=exec '%s' "$@"
shc [-l]=
shc opts=
shc: cc test.sh.x.c -o test.sh.x
shc: strip test.sh.x
shc: chmod go-r test.sh.x
次の警告のため、このコンパイルされたファイルを実行できません。
./test.sh.x
./test.sh.x: Argument list too long: /bin/sh
スクリプトをコンパイルできるように、_SC_ARG_MAX制限をどのように増やすことができますか?
答え1
使用しているプログラムは_SC_ARG_MAX
それを正しく読んで報告できません-1
。
つまり、この値を上げようとしても(システムヘッダを変更し、少なくともカーネルといくつかのユーティリティを再コンパイルする必要があります)まだ正しい値を読み込めませんでした。
メッセージは警告なので致命的ではありません。ユーティリティが実行するすべての操作は正常である可能性が高いです。
システム構成変数ARG_MAX
(記号定数を持つ値_SC_ARG_MAX
)は、Ubuntuでは2097152、OpenBSDでは262144()の値を持ちますgetconf ARG_MAX
。あなたの値155201がすぐそこにあります。
その値が何であるかを判断するためにRedHatシステムにアクセスすることはできません。