В настоящее время у меня есть команда:
command -v gpg 2>/dev/null || { echo "Cound not find gpg. Aborting."; }
Я бы хотел вместо нее перенаправить вывод в / dev / null, я бы хотел отобразить сообщение с указанием вывода команды и послесловия found!.
Т.е.
Если gpg не найден: Cound not find gpg. Aborting. Если найдено gpg: gpg found at /usr/local/bin/gpgСамый простой подход будет примерно таким:
command -v gpg &>/dev/null &&
echo "gpg found at $(command -v gpg)" ||
echo "Cound not find gpg. Aborting."
Конечно, это не очень элегантно, так как он должен дважды запускать command. Альтернативой будет:
gpg=$(command -v gpg 2>/dev/null) &&
echo "gpg found at $gpg." ||
echo "Cound not find gpg. Aborting."
Это сделало бы трюк:
command -v gpg &>/dev/null && echo "gpg has been found at $(which gpg)" ||
{ echo "Cound not find gpg. Aborting."; }
Это сделало бы трюк:
command -v gpg &>/dev/null && echo "gpg has been found at $(which gpg)" ||
{ echo "Cound not find gpg. Aborting."; }
Хотя принятое решение terdon ♦ краткое и красивое, я бы предложил что-то вроде:
cmd_exists() {
(
unalias "$1" 2>/dev/null
status=$(command -v "$1")
case $status in
*"$1") echo "$1 found at $status";;
"") echo "Could not find $1. Aborting."; return 127;;
*) echo "Error: $status" >&2; return 1;;
esac
)
}
cmd_exists gpg
Он имеет дело с двумя случаями, которые не рассматриваются другим методом здесь:
[d3 ] Псевдонимы: они могут скрывать исполняемый файл, но моя функция дает вам фактический путь к исполняемому файлу, только если он есть. Другие методы дадут вам определение псевдонима и вернут нулевой код выхода, независимо от того, существует ли за ним фактическая команда или нет. Улучшенная обработка ошибок: код выхода 127 означает «Не найденный» тип ошибок, поэтому вы можете иметь отдельную обработку ошибок, когда команда не найдена и когда возникает другая ошибка. Если есть некоторая невесомая ошибка (то есть неизвестная ошибка, кроме команды, которая не найдена), она не скрывает ее, вводя в заблуждение мышление gpg не существует, когда это возможно. Если вы хотите отбросить эти ошибки, вызовите его так: cmd_exists gpg 2>/dev/nullПримечания:
Что касается псевдонимов, это может быть или не быть тем, что вы хотите, например зная, что псевдоним существует, может быть достаточно для вас.
Unalias происходит внутри подоболочки, поэтому он не испортит псевдонимы вашей рабочей оболочки.
Что касается обработки ошибок, я не являюсь эксперт по сценариям оболочки, поэтому я не знаю, насколько вероятна ошибка в этой ситуации, и если есть лучший способ справиться с ними.
Так что будьте осторожны, это может быть излишним.
Хотя принятое решение terdon ♦ краткое и красивое, я бы предложил что-то вроде:
cmd_exists() {
(
unalias "$1" 2>/dev/null
status=$(command -v "$1")
case $status in
*"$1") echo "$1 found at $status";;
"") echo "Could not find $1. Aborting."; return 127;;
*) echo "Error: $status" >&2; return 1;;
esac
)
}
cmd_exists gpg
Он имеет дело с двумя случаями, которые не рассматриваются другим методом здесь:
Псевдонимы: они могут скрывать исполняемый файл, но моя функция дает вам фактический путь к исполняемому файлу, только если он есть. Другие методы дадут вам определение псевдонима и вернут нулевой код выхода, независимо от того, существует ли за ним фактическая команда или нет. Улучшенная обработка ошибок: код выхода 127 означает «Не найденный» тип ошибок, поэтому вы можете иметь отдельную обработку ошибок, когда команда не найдена и когда возникает другая ошибка. Если есть некоторая невесомая ошибка (то есть неизвестная ошибка, кроме команды, которая не найдена), она не скрывает ее, вводя в заблуждение мышление gpg не существует, когда это возможно. Если вы хотите отбросить эти ошибки, вызовите его так: cmd_exists gpg 2>/dev/nullПримечания:
Что касается псевдонимов, это может быть или не быть тем, что вы хотите, например зная, что псевдоним существует, может быть достаточно для вас.
Unalias происходит внутри подоболочки, поэтому он не испортит псевдонимы вашей рабочей оболочки.
Что касается обработки ошибок, я не являюсь эксперт по сценариям оболочки, поэтому я не знаю, насколько вероятна ошибка в этой ситуации, и если есть лучший способ справиться с ними.
Так что будьте осторожны, это может быть излишним.
Это сделало бы трюк:
command -v gpg &>/dev/null && echo "gpg has been found at $(which gpg)" ||
{ echo "Cound not find gpg. Aborting."; }
Хотя принятое решение terdon ♦ краткое и красивое, я бы предложил что-то вроде:
cmd_exists() {
(
unalias "$1" 2>/dev/null
status=$(command -v "$1")
case $status in
*"$1") echo "$1 found at $status";;
"") echo "Could not find $1. Aborting."; return 127;;
*) echo "Error: $status" >&2; return 1;;
esac
)
}
cmd_exists gpg
Он имеет дело с двумя случаями, которые не рассматриваются другим методом здесь:
Псевдонимы: они могут скрывать исполняемый файл, но моя функция дает вам фактический путь к исполняемому файлу, только если он есть. Другие методы дадут вам определение псевдонима и вернут нулевой код выхода, независимо от того, существует ли за ним фактическая команда или нет. Улучшенная обработка ошибок: код выхода 127 означает «Не найденный» тип ошибок, поэтому вы можете иметь отдельную обработку ошибок, когда команда не найдена и когда возникает другая ошибка. Если есть некоторая невесомая ошибка (то есть неизвестная ошибка, кроме команды, которая не найдена), она не скрывает ее, вводя в заблуждение мышление gpg не существует, когда это возможно. Если вы хотите отбросить эти ошибки, вызовите его так: cmd_exists gpg 2>/dev/nullПримечания:
Что касается псевдонимов, это может быть или не быть тем, что вы хотите, например зная, что псевдоним существует, может быть достаточно для вас.
Unalias происходит внутри подоболочки, поэтому он не испортит псевдонимы вашей рабочей оболочки.
Что касается обработки ошибок, я не являюсь эксперт по сценариям оболочки, поэтому я не знаю, насколько вероятна ошибка в этой ситуации, и если есть лучший способ справиться с ними.
Так что будьте осторожны, это может быть излишним.