2011-08-26 137 views
2

我現在的劇本是這樣的:等待酒完成運行

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

當只有一個節目是葡萄酒在同一時間運行的正常工作。但是如果我第二次運行這個程序,在第一個程序完成之前,這兩個腳本都會等待其他程序退出。

這不起作用:

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

爲你關閉文本編輯器前,將退出。

我需要使用start命令,因爲我希望使用其默認編輯器/查看器運行文件。

回答

2

wineserver--wait標誌,它可以用來這樣做。

但是,如果你一次運行多個程序,它將等待所有的程序完成。

0

會發生什麼事是wine只是要求wineserver啓動程序並退出了,我沒有發現任何好的機制,從wineserver獲得有關它產生的過程通知。

我的建議是使用How to wait for exit of non-children processes中的一種方法等待wineserver開始的進程的完成,但您需要知道它的PID。可能的想法:運行wineserver -f -d | grep init_thread(並從那裏獲得PID,但我看不出有哪一種方法可以找出哪些是避免競爭條件並忽略噪聲;或者嘗試在ps的輸出中找到你的過程,但它很醜,並且絕對不健壯。

如果沒有更好的曲面,您可能想要向Wine開發人員添加這樣的功能(可能作爲wine的標誌)。

0

要等待葡萄酒退出的過程,可以將其輸出管道輸送到另一個程序。 在我的系統,下面的達到預期的效果:

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

如果要異步等待:

wine "program.exe" | cat & pid=$! 
# ... 
wait $pid 
echo "program.exe has finished"