Перенаправить конкретную ошибку в stderr

Установите отсутствующую библиотеку

В очень похожей установке я столкнулся с той же проблемой. Запуск демона вручную, как показано выше, не решил проблему. Через некоторое время я обнаружил, что библиотека, которая позволяет аутентификацию на основе Gnome Keyring для Subversion, не была установлена. Сообщение об ошибке не отображалось, поэтому я не обратил на это внимания. Я установил ее с помощью:

sudo apt-get install libsvn-auth-gnome-keyring

и она сразу же заработала.

1
15.02.2019, 13:01
2 ответа

Команда readиспользует stderrдля печати подсказки.Либо вы должны

  1. избегайте использования 2> /dev/nullпри вызове скрипта
  2. добавить 2>&1в конец команды read, чтобы она вместо этого использовала стандартный вывод для печати подсказки:
        read -n1 -r -p "Error! Press any key to continue..." 2>&1
0
27.01.2020, 23:41

Подсказки и любые диагностические сообщения всегда генерируются в стандартном потоке ошибок. Это делается для того, чтобы не мешать возможным перенаправлениям обычного вывода. Кстати, это также верно для основного приглашения оболочки ($PS1).

Это означает, что подсказка, которую выводит read -p, также записывается в стандартный поток ошибок, и, поскольку вы перенаправляете этот поток в /dev/null, вы никогда не увидите подсказку.

Я бы посоветовал проверить существование /Users/leetbacoon/functions.sh, прежде чем пытаться найти его:

if [ -f "$HOME/functions.sh" ]; then
   . "$HOME/functions.sh"
else
    printf '%s is missing...\n' "$HOME/functions.sh" >&2
done

Это имитирует способ, которым ~/.bash_profileиногда вызывает ~/.bashrc, и позволяет избежать ошибки «Нет такого файла или каталога».

Также обратите внимание, что создаваемое вами сообщение об ошибке вводит в заблуждение. Поиск файла ничего не «порождает», даже подоболочку.

1
27.01.2020, 23:41

Теги

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