Instalando a ferramenta de linha de comando se não estiver no PATH

1

Eu tenho essa função bash que estou tentando usar para instalar uma ferramenta de linha de comando se ela ainda não estiver no PATH:

ncf(){

  if ! type -f ncf &> /dev/null || ! which ncf &> /dev/null; then

       echo "Installing NPM package '@oresoftware/ncf' globally...";

       npm i -s -g '@oresoftware/ncf' || {
         echo -e "Could not install NPM package '@oresoftware/ncf' globally." >&2
         echo -e "Please check your permissions to install global NPM packages." >&2
         return 1;
       }

  fi

  command ncf $@;
}

Eu tenho algumas perguntas - é type -f ncf e which ncf redundante? No momento, estou verificando se algum deles sai com um valor diferente de zero - se algum dos dois fizer, eu reinstalo (pelo menos é o que acho que o código está fazendo).

Minha outra pergunta é - &> funcionará para versões bash mais antigas que 4 ou outras como sh, ksh, zsh, etc? Existe outro constructo que devo usar que é mais cross-platform do que &> ?

    
por Alexander Mills 24.06.2018 / 08:06

1 resposta

1

which é redundante com type , exceto quando faz a coisa errada completamente. Não use which nunca (exceto em ksh ou zsh). Não use type -f no sh portátil: uma extensão ksh / bash. Apenas use type simples. Se você quiser procurar por um comando externo, apesar da presença de uma função com o mesmo nome, você pode usar (unset -f ncf; type ncf) .

Para redirecionar a saída, use >/dev/null 2>&1 . Isso pode ser abreviado para &>/dev/null em ksh, bash e zsh, mas não em sh simples.

  if ! type -f ncf >/dev/null 2>/dev/null; then …
    
por 24.06.2018 / 12:26