Перезапустить программу, когда grep возвращает результат - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь написать небольшой скрипт bash, который запускает файл Wine .exe (Photoshop). Во время запуска при возникновении ошибки загрузки отображается сообщение «Ошибка подтверждения».

Концепция будет:

  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. Если есть ошибка, я прекращаю выполнение wine, используя pipefail, и пытаюсь перезапустить фотошоп. Зацикливание до загрузки.

Я пытался написать небольшой сценарий, который явно неверен. Как заставить это работать?

#!/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 Ответ

1 голос
/ 20 мая 2019

Один из способов:

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

grep -q немедленно завершится успешно, когда будет найдено Assertion, и, поскольку входные данные получены из подстановки процесса, он не будет ожидать wine64 выходить.Это приводит к вводу цикла и перезапуску Wine.

Если программа завершается без grep, находя Assertion, то grep завершается с ошибкой, приводящей к остановке цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...