Я успешно использовал оболочку рыбы.
Seee также Заставляют zsh завершение показать первое предположение на той же строке (как рыба)
Функциональный подход позволяет получить наиболее четкий код. Возможны, по крайней мере, два варианта, один из которых предложен самим Флоем выше в комментарии (что не было бы моим предпочтительным вариантом):
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
при каждом вызове, и которое также не требует дублирования строковых или переменных выражений (как в другом предложении).
Самый простой способ - просто запустить
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!"