Сообщение об ошибке сценария в одной строке

С zsh, да, не с bash.

С zsh:

cat file.in > file1.out > file2.out

или даже:

< file.in > file1.out > file2.out

(работает $NULLCMD: cat по умолчанию)

Обратите внимание, что cat имеет только один стандартный вывод, в который он записывает содержимое file.in. Выше stdout cat представляет собой канал. И zsh считывает этот вывод с другого конца, чтобы записать его как в file1.out, так и в file2.out.

Другими словами, здесь нет никакой магии, zsh просто реализует tee внутри.

0
13.09.2017, 01:18
2 ответа

Вы можете защитить попытку mv, убедившись, что исходный файл существует, прежде чем пытаться переименовать его:

test -f /prod/new/outputlog/error.log &&
    mv /prod/new/outputlog/error.log /prod/hist/new/outputlog/error.log.32423423424

Или вы можете перехватить сообщение об ошибке и попытаться разделить его на две строки:

mv /prod/new/outputlog/error.log /prod/hist/new/outputlog/error.log.32423423424 2>&1 |
    fmt -s -w80 >&2
2
28.01.2020, 02:24

Вместо того, чтобы искажать сообщение об ошибке, просто проверьте перемещаемый файл перед его перемещением:

if [ -f /prod/new/outputlog/error.log ]; then
    mv /prod/new/outputlog/error.log \
       /prod/hist/new/outputlog/error.log.32423423424
fi

или с использованием логики короткого замыкания -:

[ -f /prod/new/outputlog/error.log ] &&
mv /prod/new/outputlog/error.log \
    /prod/hist/new/outputlog/error.log.32423423424

Если отсутствие файла журнала является проблемой, о которой необходимо сообщить, сделайте это отдельно:

if [ -f /prod/new/outputlog/error.log ]; then
    mv /prod/new/outputlog/error.log \
       /prod/hist/new/outputlog/error.log.32423423424
else
    echo 'ERROR: /prod/new/outputlog/error.log is missing' >&2
fi
1
28.01.2020, 02:24

Теги

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