Лучший и короткий способ запустить программу, если другой не установлен

2 ответа

Функциональный подход позволяет получить наиболее четкий код. Возможны, по крайней мере, два варианта, один из которых предложен самим Флоем выше в комментарии (что не было бы моим предпочтительным вариантом):

function myprint
{
    if type banner >/dev/null
    then  banner "$@"
    else  echo "$@"
    fi
}

myprint "Hello World!"

или - вариант, который я бы предпочел - использовать определение условной функции :

if type banner >/dev/null
then  function myprint { banner "$@" ;}
else  function myprint { echo "$@" ;}
fi

myprint "Hello World!"

, которое не имеет накладных расходов на условие if при каждом вызове, и которое также не требует дублирования строковых или переменных выражений (как в другом предложении).

9
27.01.2020, 20:33

Самый простой способ - просто запустить

command1 "hello world" || command2 "hello world"

, если первая команда не существует, левая сторона || WIL сбой, так что команда на право будет запущено. Я не понимаю, почему вам нужно проверить первым. Просто сделай, и если вы потерпите неудачу, сделайте что-нибудь еще.

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

string="Hello world!"
banner "$string" || echo "$string"

Если вам действительно нужно проверить наличие команды, я бы сделал это так:

command="banner"
type "$command"  2>/dev/null || command="echo"
"$command" "Hello world!"
3
27.01.2020, 20:33

Теги

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