Como verificar se o vim está instalado?

3

Eu quero saber como verificar se um comando está instalado.

Especificamente, desejo alias vi to vim em todas as máquinas em que vim é um comando válido. E eu quero manter meus arquivos * rc genéricos. Mas alguns sistemas operacionais não vêm com vim instalado por padrão. E em outros, vi é Vi o IMproved, mas vim não é um comando válido.

Eu imaginei que poderia fazer isso (estilo 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

Mas existe uma maneira melhor? E o comando which está garantido para estar presente em todas as máquinas tipo unix?

P.S. Eu tenho arquivos * rc para quase todos os shell populares (bash, tcsh, zsh, ksh) e pretendo aplicar a solução em todos eles. Portanto, a solução não deve ser específica do shell. A sintaxe pode , no entanto.

    
por Sildoreth 20.04.2015 / 16:26

2 respostas

2

Você pode usar command , por exemplo:

command -v vim

É um comando interno do shell. (zsh, bash, ksh, mas não tcsh)

Em tcsh você pode usar isto:

~> sh -c 'command -v vim'
    
por 20.04.2015 / 19:43
0

Acho que você está complicando demais isso.

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

A única razão para executar vim e vi é se existem sistemas onde estes são comandos válidos, mas a instalação está de alguma forma quebrada ou existe outro programa com esse nome.

O type embutido existe em todos os shells POSIX e na maioria dos shells Bourne. Em csh (e apenas em csh ), use which :

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

Em peixes:

if type vim >/dev/null 2>/dev/null; alias vi=vim; end
    
por 21.04.2015 / 03:24