3

私の現在のスクリプトは次のようになります。

cd ~/.wine/drive_c/
echo "test123" > foo$$.txt
wine start "C:\foo$$.txt"
wineserver -w
echo "Wine is done!"

これは、一度に 1 つのプログラムのみが wine で実行されている場合にうまく機能します。ただし、これを 2 回目に実行すると、最初のプログラムが完了する前に、両方のスクリプトが互いのプログラムが終了するのを待ちます。

これは動作しません:

cd ~/.wine/drive_c/
echo "test123" > foo$$.txt
$(wine start "C:\foo$$.txt") &
wait ${!}
echo "Wine is done!"

テキストエディタを閉じる前に終了するためです。

startファイルをデフォルトのエディター/ビューアーで実行したいので、コマンドを使用する必要があります。

4

4 に答える 4

3

wineserver--wait正確にそれを行うために使用できるフラグがあります。

ただし、一度に複数のプログラムを実行すると、すべてのプログラムが終了するまで待機します。

于 2012-08-07T14:01:36.403 に答える
3

wine によって開始されたプロセスが終了するのを待つために、その出力を別のプログラムにパイプできます。私のシステムでは、次の方法で目的の効果が得られます。

wine "program.exe" | cat
echo "program.exe has finished"

非同期で待機する場合:

wine "program.exe" | cat & pid=$!
# ...
wait $pid
echo "program.exe has finished"
于 2012-08-07T10:50:31.977 に答える
0

何が起こるかというと、プログラムを開始して終了するようにwine要求するだけで、生成されたプロセスに関するwineserver通知を取得するための適切なメカニズムが見つかりませんでした。wineserver

私の提案は、 How to wait for exit of non-children processeswineserverのメソッドの 1 つを使用して開始されたプロセスの完了を待つことですが、その PID を知る必要があります。考えられるアイデア: 実行してそこから PID を取得しますが、競合状態を回避し、ノイズを無視するために、どれがどれであるかを見つける簡単な方法がわかりません。またはの出力でプロセスを見つけようとしますが、それは醜く、確実に堅牢ではありません。wineserver -f -d | grep init_thread(ps

何も改善されていない場合は、Wine 開発者にそのような機能の追加を提案することをお勧めします (おそらく へのフラグとしてwine)。

于 2011-08-26T17:08:48.820 に答える