2012-04-30 4 views
2

ディレクトリ内のたくさんのプロットを見たいと思うことがよくあります。ループのためのbashのデタッチプロセス

for PLT in *.png; do display ${PLT} & ; done #doesn't work :-(

は、この種のもののために簡単/少ない醜い/より良いイディオムがあるので

for PLT in *.png; do bash -c "display ${PLT} &" ; done 

:私は、通常のような何かをしますか? は、私はまた、括弧内のcommmandを囲む試してみましたが...私はインタラクティブで働いています

for PLT in *.png; do (display ${PLT}) ; done 

EDIT

注意をそれが動作しないか(それが唯一のプロットを開きます)ターミナル。私は、スクリプトを記述し、複数行に2番目のforループを壊した場合、それだけで正常に動作します...

答えて

4

はあなた&後のセミコロンを削除します。

また
for PLT in *.png; do display ${PLT} & done 

を、「$ {PLT}」であるを使用してあなたのファイル名にスペースがある場合に備えて、良い方法です。

+0

ブリリアント!通常、セミコロンで構文エラーが発生するのはなぜですか? – mgilson

+0

シェル構文です。どちらも ; &はラインターミネータです。空の行が終了しています。これは構文エラーとみなされます。 –

+0

もう一度おかげさししますが、私はファイル名のスペースを悪い習慣とみなしているので、私の変数を二重引用符で囲まないのが一般的です...しかし、あなたはおそらくそれについて正しいでしょう... – mgilson

-1

xargsでこれを行うことができます。

ls *.png | xargs -0 -n 1 -P 10 display 

処理する必要があるpngファイルの数に応じて、いずれのオプションも少し安全かもしれません。

+0

いずれの例もスペースを含むファイルでは動作しません。 http://mywiki.wooledge.org/ParsingLs – jordanm

+0

@jordanm、私は空白で動作するように修正しました。 – gpojd

+0

は、lsの出力が\ 0終了していないため、完全に破損します。 – jordanm

関連する問題