Выполнение скрипта будет продолжено, даже если перенаправление в файл не удастся [закрыто]

0
05.11.2018, 17:28
3 ответа

Поскольку перенаправление обрабатывается до выполнения соответствующей команды, в случае сбоя перенаправления команда вообще не будет выполняться.

Итак, для

./script.sh >"$output"

, чтобы успешно запустить сценарий, даже если перенаправление к файлу в $outputне удалось, нам сначала нужно определить, можно ли выполнить перенаправление вручную.

Это можно проверить, перенаправив вывод, например, из. echoи поймать, не сработало оно или нет:

if ! echo >"$output" 2>/dev/null; then
    output=/dev/null
fi

./script.sh >"$output"

Здесь мы перенаправляем вывод на /dev/null, если выходной файл по умолчанию непригоден для использования. Вместо этого вы можете использовать, например. /dev/stdoutвместо /dev/null, если вы вместо того, чтобы отбрасывать вывод, хотите, чтобы он перешел к стандартному выводу.

1
28.01.2020, 02:31

Я бы рекомендовал использовать уже существующую подсистему протоколирования(syslog). Инструмент строки команды -для доступа к этому — logger.

Установите средство userс соответствующим приоритетом вывода (ошибок, предупреждений, информации, отладки и т. д. )и тегом метки, представляющей вашу программу, и все готово:

your_program 2>&1 | logger -t your_program -p user.info
2
28.01.2020, 02:31

Вы можете использовать teeв качестве посредника вместо прямого перенаправления вывода команды. Он не остановится только из-за сбоя при открытии выходного файла.

$ cat out.sh
#!/bin/bash
outfile=${1-/dev/null}
echo hello | tee "$outfile"
echo done.
$ touch unwritable; chmod a-w unwritable
$ bash out.sh unwritable 
tee: unwritable: Permission denied
hello
done.

Статус выхода конвейера будет статусом выхода последней команды, tee. Если вам нужен статус выхода первой части конвейера, вы можете использовать, например. массив Bash PIPESTATUS, чтобы получить его.

Перенаправьте вывод teeна /dev/null, если вы не хотите копировать вывод на стандартный вывод сценария.

2
28.01.2020, 02:31

Теги

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