Bash 等待葡萄酒结束
我当前的脚本如下所示:Bash 等待葡萄酒结束,bash,wine,Bash,Wine,我当前的脚本如下所示: cd ~/.wine/drive_c/ echo "test123" > foo$$.txt wine start "C:\foo$$.txt" wineserver -w echo "Wine is done!" 当一次只有一个程序在wine中运行时,这一点很好。但是,如果我在第一个程序完成之前第二次运行它,两个脚本都将等待其他程序退出 这不起作用: cd ~/.wine/drive_c/ echo "test123" > foo$$.txt $(wine
cd ~/.wine/drive_c/
echo "test123" > foo$$.txt
wine start "C:\foo$$.txt"
wineserver -w
echo "Wine is done!"
当一次只有一个程序在wine中运行时,这一点很好。但是,如果我在第一个程序完成之前第二次运行它,两个脚本都将等待其他程序退出
这不起作用:
cd ~/.wine/drive_c/
echo "test123" > foo$$.txt
$(wine start "C:\foo$$.txt") &
wait ${!}
echo "Wine is done!"
因为它将在您关闭文本编辑器之前退出
我需要使用
start
命令,因为我想要一个文件以其默认编辑器/查看器运行。发生的是wine
只要求wineserver
启动程序并退出,而我没有找到好的机制来从wineserver
获取关于它产生的进程的通知
我的建议是使用中的方法之一等待wineserver
启动的流程完成,但您需要知道其PID。可能的想法:运行wineserver-f-d | grep init_thread(
并从那里获取PID,但我看不到简单的方法来找出哪个是哪个,以避免竞争条件,并忽略噪音;或者尝试在ps
的输出中找到您的进程,但它很难看,而且绝对不健壮
如果没有更好的方法出现,您可能会建议向Wine开发人员添加这样的功能(可能作为Wine的标志)。要等待Wine启动的流程退出,您可以将其输出传输到另一个程序。 在我的系统上,以下功能达到了预期效果:
wine "program.exe" | cat
echo "program.exe has finished"
如果要异步等待,请执行以下操作:
wine "program.exe" | cat & pid=$!
# ...
wait $pid
echo "program.exe has finished"
wineserver
有一个--wait
标志,可用于准确执行此操作
但是,如果您同时运行多个程序,它将等待所有程序完成。wine
等待程序退出。wine start程序
不会退出
摘要:
等待程序完成。我建议使用此方法wine
无需等待即可退出wine start
也会等待程序完成wine start\wait
直到Wine中的所有程序和所有服务都完成wineserver——等待
Services.exe
、plugplay.exe
和winedevice.exe
这样的服务在最后一个程序完成几秒钟后继续运行,wineserver--wait
也会等待这些服务退出
其中一些服务持有状态并写入状态(和注册表)因此,如果要备份或删除wine前缀,请确保等待这些服务退出。注意:此命令的
|cat
部分不起任何作用。cat
在wine
命令退出时结束。wine
本身会等待程序退出。wine start
(OP正在使用的内容)不会等待。因此,解决方案只是使用wine
而不是wine start
@MerlijnSebrechts管道(| cat
部分)更改缓冲和isatty()的结果
,因此可以影响葡萄酒。在撰写本文时,需要使葡萄酒按预期运行。这可能是因为葡萄酒在此期间发生了变化,不再需要管道。感谢您的解释!根据我不科学的测试,wine命令没有在|cat
中等待更长的时间。然而,我确实找到了这条评论r、 说一些程序可能需要这个来防止他们行为不端: