sed -e 's/online=YES/online=NO/' -e t -e 's/online=NO/online=YES/'
Команда t
в sed
перейдет к заданной метке (или к концу сценария sed
, если метка не указана ), если предыдущая команда s
произвела замену с момента последнего чтения входной строки.
В этом случае будет пропущена вторая замена, если была выполнена первая замена.
В случае, если в строке может быть несколько online=YES
или online=NO
, используйте
sed -e 's/online=YES/online=MAYBE/g' \
-e 's/online=NO/online=YES/g' \
-e 's/online=MAYBE/online=NO/g'
, где строка MAYBE
иначе не связана с шаблоном online=
. Это было бы похоже на использование временной переменной для замены значений двух переменных.
Тестирование:
$ echo "online=YES online=YES online=NO online=YES" | sed -e 's/online=YES/online=MAYBE/g' -e 's/online=NO/online=YES/g' -e 's/online=MAYBE/online=NO/g'
online=NO online=NO online=YES online=NO
Причина, по которой команда n
не совсем работает вместо команды t
в первом примере, заключается в том, что она считывает следующую строку ввода на полпути сценария и запускает вторую половину сценария. на этой линии:
$ ( echo "online=YES"; echo "online=YES" ) | sed -e 's/online=YES/online=NO/' -e n -e 's/online=NO/online=YES/'
online=NO
online=YES
Вы получите одинаковый вывод для двух NO
строк.
Решение состояло в том, чтобы добавить export DISPLAY=:0
в скрипт:
#!/bin/bash
if [ $1 == 'off' ]
then
echo "Chromium OFF"
pkill -x -15 chromium
else
echo "Chromium ON"
export DISPLAY=:0
chromium http://localhost/shopCaseCodeigniter/selectSlideshowForScreen/1 --kiosk --password-store=basic > /home/miguel/Scripts/logs/chromium.log 2>&1
fi