управляйте-v пользовательским выводом

У меня в настоящее время есть команда:

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
2
задан 21 July 2017 в 10:57

3 ответа

Самый простой подход был бы чем-то вроде этого:

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."
5
ответ дан 2 December 2019 в 01:32

Это добилось бы цели:

command -v gpg &>/dev/null && echo "gpg has been found at $(which gpg)" || 
{ echo "Cound not find gpg. Aborting."; }
2
ответ дан 2 December 2019 в 01:32

Хотя принятое решение 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

Это имеет дело с двумя случаями не, имел дело другим методом здесь:

  1. Псевдонимы: они могут скрыть исполняемый файл, но моя функция дает Вам фактический путь к исполняемому файлу, только если существует тот. Другие методы дадут Вам определение псевдонима и возвратят нулевой код выхода, существует ли фактическая команда позади него или нет.

  2. Лучшая обработка ошибок: Код выхода 127 обозначает "Команду, не найденную" тип ошибок, таким образом, у Вас может быть отдельная обработка ошибок для того, когда команда не найдена и когда некоторая другая ошибка происходит.

    Если существует некоторая неуловимая ошибка (то есть, неизвестная ошибка кроме команды, не находимой), она не скрывает его, заставляя Вас поверить gpg не существует, когда это может. Если Вы хотите отбросить это ошибки, то назовите его как:

    cmd_exists gpg 2>/dev/null


Примечания:

Относительно псевдонимов это может или не может быть тем, что Вы хотите, например, знание, что псевдоним существует, может быть достаточно для Вас.

Непсевдоним происходит в подоболочке, таким образом, он не смешает псевдонимы Вашей рабочей оболочки.

Относительно обработки ошибок я не эксперт по сценариям оболочки, таким образом, я не знал бы, как, вероятно, ошибка будет в этой ситуации, ни если существует лучший способ обработать их.

Поэтому остерегайтесь, это могло бы быть излишеством.

1
ответ дан 2 December 2019 в 01:32

Другие вопросы по тегам:

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