我正在尝试编写一个启动bine .exe文件(Photoshop)的bash脚本。在启动过程中,如果出现启动错误,则会显示消息“声明失败”。
这个概念是:
wine64 "/home/artik/.wine/drive_c/Program Files/Adobe/Adobe Photoshop CC 2019/Photoshop.exe"
2>&1 | grep -i Assertion
pipefail
执行wine,并尝试重新启动photoshop
循环播放直到它启动。我试图编写一个明显错误的小脚本。如何使其运作?
#!/bin/sh
set -euxo pipefail
wine64 "/home/artik/.wine/drive_c/Program Files/Adobe/Adobe Photoshop CC 2019/Photoshop.exe" 2>&1 | grep -i -L Assertion
if [ Assertion failed ]
then
wine64 "/home/artik/.wine/drive_c/Program Files/Adobe/Adobe Photoshop CC 2019/Photoshop.exe" 2>&1 | grep -i -L Assertion
fi
答案 0 :(得分:1)
一种方法是:
while grep -q Assertion < <(wine64 ... 2>&1)
do
pkill wine64
done
grep -q
将在找到Assertion
后立即成功退出,并且由于输入来自进程替换,因此它将不等待wine64
退出。这将导致进入循环并重新启动Wine。
如果程序退出时没有grep
未找到Assertion
,则grep
退出失败并导致循环停止。