非常に大きなパラメータ(サイズ1MB)を含むコマンドを入力しようとすると、「パラメータのリストが長すぎます」というメッセージが表示されます。この議論にどのように参加できますか?
オペレーティングシステム: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
通常はそうです。