Как проверить, установлен ли vim?

Я хочу знать, как проверить, установлена ​​ли команда.

В частности, я хочу, чтобы alias vi vim на всех машинах, где vim является допустимой командой. И я хочу, чтобы мои файлы * rc были универсальными. Но некоторые ОС не поставляются с vim установленным по умолчанию. И в других, vi Vi IMproved, но vim не является допустимой командой.

Я решил, что смогу это сделать (стиль bash):

 #If the version info from vi includes the phrase "Vi IMproved", then vi IS vim. vimInfo=$(vi --version 2> /dev/null | head -n 1 | grep -Fi 'VI IMPROVED') if [[ -z $vimInfo ]]; then if [[ -f $(which vim) ]]; then #if the value returned by 'which' is a valid directory, then vim is installed alias vi='vim' else #vim is not installed echo "Vi IMproved (vim) is not installed"; fi fi 

Но есть ли лучший способ? И which команда гарантирована для всех Unix-подобных машин?

PS У меня есть * rc файлы почти для каждой популярной оболочки (bash, tcsh, zsh, ksh), и я намерен применить решение во всех них. Поэтому решение не должно быть специфичным для оболочки. Синтаксис может быть, однако.

2 Solutions collect form web for “Как проверить, установлен ли vim?”

Вы можете использовать command :

 command -v vim 

Это встроенная команда оболочки. (zsh, bash, ksh, но не tcsh)

В tcsh вы можете использовать это:

 ~> sh -c 'command -v vim' 

Я думаю, что ты это слишком обидно.

 if type vim >/dev/null 2>/dev/null; then alias vi=vim fi 

Единственная причина для запуска vim и vi – если есть системы, где это допустимые команды, но установка каким-то образом сломана или есть другая программа под этим именем.

type встроен во все оболочки POSIX и большинство оболочек Bourne. В csh (и только в csh ) используйте:

 if ({ which vim }) alias vi vim >&/dev/null 

У рыб:

 if type vim >/dev/null 2>/dev/null; alias vi=vim; end 
  • Как выбрать ответ для интерактивной подсказки при установке из сценария оболочки
  • Bash - ненулевые аргументы для оператора (массив)
  • Любой способ, с помощью которого я могу преобразовать любую заданную временную метку в стандартную в BASH
  • Использование настраиваемого фильтра через скрипт для отклонения входящей электронной почты
  • Повторное использование пользовательского ввода в скрипте
  • Убедитесь, что переменная имеет определенное количество пробелов
  • gnu параллельно с ffmpeg не обрабатывает первый файл
  • Создание множества файлов со случайным контентом
  • Перенаправление активного порта
  • Является ли `bash --posix` необходимым для bash 4, когда передается опция` set` для подсетей?
  • Простые сценарии обертки, порождающие 100s процессов bash
  • Linux и Unix - лучшая ОС в мире.