Этот Github Issues кажется похожим. Судя по всему, проблема между пакетами, подготовленными для Ubuntu, и пакетами, созданными для Debian. Предлагаемый обходной путь — использовать Dockerfile, который на самом деле использует Ubuntu
Закрыть stderr с помощью2>&-
:
cat my-file.txt 2>&- || false
U&L:Разница между 2>& -, 2>/dev/null, |&, &>/dev/null и >/dev/null 2>&1
У вас есть несколько вариантов
Не печатать файл, если он не существует, но по-прежнему разрешать cat
жаловаться, если файл существует, но не может быть открыт
[ -f my-file.txt ] && cat my-file.txt
Избегайте вывода сообщения об ошибке, если файл не может быть открыт по какой-либо причине, путем перенаправления stderr в «никуда»
cat my-file.txt 2>/dev/null
Избегайте установки $?
на ненулевое состояние выхода, отличное от -, которое указывало бы на возникновение ошибки.
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
таким образом, что статус выхода составной команды будет всегда ноль (это как бы "предотвращает ошибку" ).