Как не распечатать сообщение об ошибке при использовании логических операторов в Bash? - PullRequest
1 голос
/ 11 июля 2020

Допустим, у меня есть следующий сценарий:

#!/usr/bin/env bash
git -v || echo "You don't have Git!"

Смысл этого сценария - проверить, есть ли у пользователя git или нет, и отобразить, если нет. Внутри этого скрипта, если у пользователя, который его запускает, нет git, он не только отобразит «У вас нет Git!», Но также отобразит сообщение об ошибке:

git: command not found

Есть ли какой-либо метод использования логических операторов в bash для имитации оператора try-catch / try-except, где он не будет отображать сообщение об ошибке, если это не указано в сценарии?

1 Ответ

4 голосов
/ 11 июля 2020

Перенаправить stderr (поток ошибок) на /dev/null:

git -v 2>/dev/null || echo "You don't have Git!"

Другой вариант - получить фактический путь к команде git:

if gitcmd=$(command -v git)
then
    echo "Git is at $gitcmd"
else
    echo "You don't have Git!"
fi
...