2

コンテンツをリストにダンプしたいのですが、この問題を解決する方法がわかりません。

リスト内のすべての要素を表示しようとすると、シェルに次のように表示されます。

引数リストが長すぎる

Makefileで:

$(FILE_SOURCE:%= echo % >> $(FILE_LIST_TMP);)

メッセージ:

execvp: /bin/sh: Argument list too long

カーネルを再コンパイルせずにこの問題を解決する他の方法はありますか?

提案をいただければ幸いです。ありがとう

今、私は問題を解決するためにperlを使用しています。以下は私の方法です:

while read line; do
  perl -e 'print "$$ARGV[0]\n"' $$line >> $(FILE_LIST_TMP) ; \
done < $(FILE_SOURCE)`
4

1 に答える 1

2

コマンド ラインを大幅に短縮する方法の 1 つは$(FILE_LIST_TMP)、すべてのエコーで使用しないことです。代わりに、次のように 1 回だけ使用します。

(${FILE_SOURCE:%=echo %;}) > $(FILE_LIST_TMP)

これをシェルに送信する代わりに:

echo foo >> my_temp_file ; echo bar >> my_temp_file ; echo baz >> my_temp_file; ..

これを使用します:

(echo foo; echo bar; echo baz;) > my_temp_file

特にファイルの数が多くなり、特に一時ファイル名が長い場合は、これは大幅に短くなります。

ファイルFILE_SOURCEがすべて共通のパスを持つサブディレクトリにあるcd場合は、そのパスを行から省略できますecho

ただし、リストが十分に長い場合、これでも最終的には不十分になる可能性があります。

于 2013-05-16T15:17:00.937 に答える