2

私はこれについて非常に初心者であり、質問への回答を検索しましたが、実装方法を理解しているものは見つかりませんでした。どんな助けでも大歓迎です。

私はスクリプトを持っています:

FILE$=`ls ~/Desktop/File_Converted/`
mkdir /tmp/$FILE
mv ~/Desktop/File_Converted/* /tmp/$FILE/

そのため、Applescript を使用して、ファイルがこのデスクトップ フォルダにドロップされたときに通知し、一時ディレクトリを作成し、そこにファイルを移動し、その他のことを行うことができます。次に、一時ディレクトリを削除します。これは問題ありませんが、問題は、現在作業しているファイルに対して作業を行う前に別のファイルが File_Converted ディレクトリにドロップされた場合、スクリプトが処理される前に $FILE 変数の値が変更されることです。現在のファイルの操作が完了しました。

私がやりたいのは、変数がたとえば $FILE1 である場所に設定された変数を使用することです。$FILE1 が定義されているかどうかを確認し、定義されていない場合はそれを使用します。定義されている場合は、$FILE2 などを試してください。最後に、変数を再利用して、$FILE1 が再び null に設定され、File_Converted フォルダーにドロップされた次のファイルがそれを使用できるようにします。また。

どんな助けでも大歓迎です。私はこれが初めてなので、どこから始めればよいかわかりません。

ありがとう!

ダン

4

3 に答える 3

2

あなたの質問を解析するのは少し難しいですが、あなたはシェルグロブループ構造を本当に理解していないと思います。グローブは、以前または後で存在する可能性があるものではなく、現在存在するものに基づいて拡張されます。

DIR=$(mktemp -d)
mv ~/Desktop/File_Converted/* "$DIR"
cd "$DIR"
for file in *; do
    : # whatever you want to do to "$file"
done
于 2012-06-07T18:34:08.493 に答える
2

LIFOは必要ありません。さまざまなイベントに対して実行されるスクリプトの複数のコピーで、変数名が競合することはありません。それら競合するのは共有一時ディレクトリですmktemp -d。スクリプトを実行するたびに、これを使用して、新しい、一意の、競合しないことが保証された名前で一時ディレクトリを作成する必要があります。

tempdir=$(mktemp -t -d mytemp.XXXXXX)
mv ~/Desktop/File_Converted/* "$tempdir"
cd "$tempdir"
for f in *; do
  ...whatever...
done
于 2012-06-07T18:40:35.237 に答える
-1

あなたが説明するのは、競合する操作が開始される前に1つの操作が終了することが明らかでない、古典的な競合状態です。これらを処理するのは簡単ではありませんが、それらを処理することで、スクリプトとプログラミングについて多くのことを学ぶことができるため、学習のためだけでも努力するだけの価値があります。

lockfileまたはのマンページを確認することから始めることをお勧めしますflock。いくつかの実験を試してください。正確に正しい質問をしているので、あなたはおそらくこれに対する適切な適性を持っているようです.

ところで、あなたはインを殺したいのではないかと思い$ます

FILE$=`ls ~/Desktop/File_Converted/`

ちなみに、@CharlesDuffy は、「lsスクリプトでの使用は、それ自体で何かが間違っていることを示しています。mywiki.wooledge.org/ParsingLsおよびmywiki.wooledge.org/BashPitfallsを参照してください」と正しく観察しています。提案されたlockfile演習で両方の点が解決されるのではないかと思われますが、それを完了するにはおそらく数時間かかるでしょう.

于 2012-06-07T18:24:07.393 に答える