2

私はこの bash スクリプトを持っており、描画情報を ImageMagick に送ります。これは次のように始まります。

#!/bin/bash 
convert -size 2200x2200 xc:white \
-fill '#FFFEFF' -draw 'point 1112,1111' \
-fill '#FFFEFE' -draw 'point 1112,1112' \
-fill '#FFFEFE' -draw 'point 1111,1112' \
-fill '#FFFEFE' -draw 'point 1110,1112' \
-fill '#FFFEFE' -draw 'point 1110,1111' \
******ON & ON 4.2 MILLION LINES MORE*******
spectrumspiral.png;

私の問題は、引数リストが長すぎるという警告が表示され続けることです。ターミナルには「強制終了」と表示され、「fork: メモリを割り当てられません」などの警告が表示されます。

ulimit -sはるかに高い値に調整しようとしましたが、役に立ちませんでした。どうしても作りたいイメージ。このスクリプトの端末チャンクを一度にフィードする方法はありますか? またはその目的のための何か。

xargs はこのようなことに使用できると聞いたことがありますが、この問題の性質に適合する特定の実装を見つけることができませんでした。

4

2 に答える 2

1

シェルのヒアドキュメントを使用してみてください

#!/bin/bash 

convert - <<EOS spectrumspiral.png
-size 2200x2200 xc:white  
-fill '#FFFEFF' -draw point '1112,1111'
-fill '#FFFEFE' -draw 'point 1112,1112'
-fill '#FFFEFE' -draw 'point 1111,1112'
-fill '#FFFEFE' -draw 'point 1110,1112'
-fill '#FFFEFE' -draw 'point 1110,1111'
# ******ON & ON 4.2 MILLION LINES MORE*****
EOS

私のシステムにはないconvertので、これが機能することをテストできます。

ほとんどのLinuxプログラム(を含む)は、StdInからの入力を受け入れることができます。これは、上記のcmd行ではcharconvertで表されます。--、ファイルからではなく、キーボードで入力されているかのように、つまりStdInからの入力を期待するようにコマンドに指示します。これ<<EOS .... EOSはヒアドキュメントであり、コマンドstdIn入力へのすべてのテキストのbash「タイピング」を表します。

あなたはすべての引用を必要とするかもしれないし、必要としないかもしれません、あなたがすでにそこにいるならば、私はそれが傷つくことはないと思います。これがそのまま機能しない場合は、入力の小さなサンプルファイル(上記のような)を使用して、ファイルが作成されるまでさまざまなシナリオをテストします。

IHTH

于 2013-01-16T00:13:59.213 に答える