
非常に大きな引数 (サイズ 1 MB) を持つコマンドを入力しようとしていますが、「引数リストが長すぎます」というメッセージが表示されます。どうすればその引数を入力できますか?
OS: Linux Ubuntu
答え1
カーネルの制限より大きい場合、実行可能ファイル間で引数を渡す方法はありませんARG_MAX
。
もしあなたがリスト引数が長すぎる場合は、 などを使用して、引数を小さな部分に分割できますxargs
。これにより、必要な回数だけコマンドが実行され、収まるだけの引数が指定されます。
構文は ですxargs command <file
。 を省略するとcommand
、 のようにその引数が表示されますecho
。
デモとして、
xargs -n 4 </etc/motd
最初の 4 つのトークンを 1 行に出力し (最初の呼び出し)、次の 4 つを次の行に出力します (引数は-n
引数の最大数を設定するため、制限はARG_MAX
まったく使用されません)。
実行したいコマンドに望ましくない副作用がある場合、これは機能しない可能性があります。たとえば、command
既存の./a.out
ファイルを上書きする場合、完了後には最後の実行の結果だけが残ることになります。
command
コマンドライン引数の代わりにファイルまたは標準入力を読み取るように設定または変更できる場合は、制限を回避できます。ファイルまたはストリームは よりもはるかに大きくなる可能性がありARG_MAX
、多くの場合は です。