grep返回结果时重新启动程序

时间:2019-05-19 21:20:49

标签: linux bash grep

我正在尝试编写一个启动bine .exe文件(Photoshop)的bash脚本。在启动过程中,如果出现启动错误,则会显示消息“声明失败”。

这个概念是:

  1. 我用酒启动Photoshop

wine64 "/home/artik/.wine/drive_c/Program Files/Adobe/Adobe Photoshop CC 2019/Photoshop.exe"

  1. 我grep输出,以查看是否发生启动错误:

2>&1 | grep -i Assertion

  1. 如果发生错误,我将停止使用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

1 个答案:

答案 0 :(得分:1)

一种方法是:

while grep -q Assertion < <(wine64 ... 2>&1)
do
  pkill wine64
done

grep -q将在找到Assertion后立即成功退出,并且由于输入来自进程替换,因此它将不等待wine64退出。这将导致进入循环并重新启动Wine。

如果程序退出时没有grep未找到Assertion,则grep退出失败并导致循环停止。