Как проверить, установлен ли 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
  • Сценарий оболочки `rm -r`: переадресовать запрос с защитой от записи и ответить« n »
  • Почему полный путь к / usr / bin / time влияет на вывод?
  • Как перебирать массив bash при удалении элемента?
  • Скрипт для удаления файлов на основе порогового значения
  • Попытка присвоения не переменной?
  • Быстрое извлечение поля с помощью grep
  • Отправить вложение в gmail id из сценария оболочки
  • Хранение более длинного текстового вывода в памяти в переменных оболочки vs Запись на диск
  • Состояние выхода Bash, используемое с PIPE
  • Linux и Unix - лучшая ОС в мире.