4

これはフォローアップの質問です

ksh 変数が受け入れる最大文字数は?

環境を確認したところ、許可されているのは

#include <sys/limits.h>
$ cpp <<  HERE | tail -1
> #include <limits.h>
> ARG_MAX
> HERE
1048576

これを増やす方法はありますか?または任意の代替

 while read line;
   do
      #parse logic
   done < $filename

本当に長い行を処理するには?私が解析しているレコードに基づいて、2M 文字行で停止しません。

環境の詳細:

 AIX $ KSH Version M-11/16/88f 
4

1 に答える 1

3

Linux 3.7.x カーネルをコンパイルし、そのinclude/uapi/linux/limits.hファイルを編集してARG_MAX 引数を増やします (2 の累乗、たとえば 2097152 など)。ただし、RAM をさらに増やしたい場合は、むしろ大量の RAM (たとえば 8G バイト) を用意する必要があります。

実際の制限はexecve(2)に関連しています。そのマニュアルページには段落があります。

しかし、(Unix 環境では) 巨大なシェル変数を持たないようにすることもできます。他のツール ( awkpythonperl....) を使用してファイルを読み取ることを検討しましたか? それらの変数環境は、フォークされたプログラムに送信されるシェル環境ではないため、非常に長い値を持つ変数を持つことができます。おそらく、いくつかの変数を Unix 環境にエクスポートすることを避けるために、kshいくつかの組み込み ( ) があります。unexport

于 2013-01-17T20:22:36.710 に答える