Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 等待葡萄酒结束_Bash_Wine - Fatal编程技术网

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
    也会等待程序完成
  • wineserver——等待
    直到Wine中的所有程序和所有服务都完成
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、 说一些程序可能需要这个来防止他们行为不端: