предотвратить ошибку, если файл не существует

Этот Github Issues кажется похожим. Судя по всему, проблема между пакетами, подготовленными для Ubuntu, и пакетами, созданными для Debian. Предлагаемый обходной путь — использовать Dockerfile, который на самом деле использует Ubuntu

-1
28.12.2020, 17:25
2 ответа

Закрыть stderr с помощью2>&-:

cat my-file.txt 2>&- || false

U&L:Разница между 2>& -, 2>/dev/null, |&, &>/dev/null и >/dev/null 2>&1

-1
18.03.2021, 22:40

У вас есть несколько вариантов

  1. Не печатать файл, если он не существует, но по-прежнему разрешать catжаловаться, если файл существует, но не может быть открыт

    [ -f my-file.txt ] && cat my-file.txt
    
  2. Избегайте вывода сообщения об ошибке, если файл не может быть открыт по какой-либо причине, путем перенаправления stderr в «никуда»

    cat my-file.txt 2>/dev/null
    
  3. Избегайте установки $?на ненулевое состояние выхода, отличное от -, которое указывало бы на возникновение ошибки.

     cat my-file.txt || true
    

В первых двух случаях следующая команда может быть проверкой состояния для проверки успешности cat. Например

cat my-file.txt 2>/dev/null
[ $? -ne 0 ] && echo 'There was an error accessing my-file.txt'

Кроме того, это можно обернуть в более читаемое условное выражение, подобное этому

if ! cat my-file.txt 2>/dev/null
then
    echo 'There was an error accessing my-file.txt'
fi

В последнем случае нет смысла использовать команду в операторе if, так как она успешно скрывает статус выхода catтаким образом, что статус выхода составной команды будет всегда ноль (это как бы "предотвращает ошибку" ).

3
18.03.2021, 22:40

Теги

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