перенаправление stdout и stderr в сценарии bash

Создайте служебную единицу systemd, как описано здесь , и обязательно включите строку «Restart = always». Systemd - это Arch-эквивалент выскочки. Минимальная конфигурация будет выглядеть так:

[Service]
ExecStart=
Restart=always

Вам может потребоваться напрямую вызвать интерпретатор и предоставить ваш скрипт в качестве аргумента в зависимости от того, какой шебанг используется в вашем скрипте.

2
22.02.2017, 21:52
1 ответ

В строке 1 команда в обратных кавычках отправляет свой стандартный вывод в цикл for ... . Он ничего не выводит на экран, если не возникла ошибка одной из команд (например, ls может пожаловаться на отсутствие пути к каталогу).

grep в строке 3 действительно записывает в stdout . Возможно, вам нужен флаг -q для тихого режима.

Я пытаюсь понять, что вы на самом деле пытаетесь сделать, потому что я думаю, что с этим, вероятно, можно справиться гораздо проще:

for item in atk/*
do
    test -d "$item" && echo "${item/*\/}" | grep -Fvf atk/versions
done

Кстати, использование обратных кавычек для интерполяции команд больше не считается хорошим стилем кодирования. Лучше использовать конструкцию $ (...) . Например, для версии в $ (ls ... awk)

2
27.01.2020, 22:10

Теги

Похожие вопросы