PATH에 없는 경우 명령줄 도구를 설치합니다.

PATH에 없는 경우 명령줄 도구를 설치합니다.

PATH에 없는 경우 명령줄 도구를 설치하는 데 사용하려는 bash 기능이 있습니다.

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 $@;
}

몇 가지 질문이 있습니다. type -f ncf및 가 which ncf중복됩니까? 이제 그 중 0이 아닌 값으로 종료된 항목이 있는지 확인하고 있습니다. 그 중 하나가 종료되면 다시 설치합니다(적어도 코드에서는 그렇게 생각합니다).

내 다른 질문은 - &>4 이전의 bash 버전이나 sh, ksh, zsh 등과 같은 다른 쉘에서 작동합니까? 좀 더 크로스 플랫폼인 다른 구성을 사용해야 합니까 &>?

답변1

whichtype완전히 잘못된 일을 하지 않는 한 중복됩니다 .사용하지 마세요which적(ksh 또는 zsh 제외). 또한 휴대용 sh에서는 사용하지 마십시오 type -f. 이것은 ksh/bash 확장입니다. type동일한 이름을 가진 함수가 있음에도 불구하고 외부 명령을 찾으려면 plain 을 사용하면 됩니다 (unset -f ncf; type ncf).

출력을 리디렉션하려면 ksh, bash 및 zsh에서는 축약할 수 있지만 일반 sh에서는 사용할 수 없는 >/dev/null 2>&1.&>/dev/null

  if ! type -f ncf >/dev/null 2>/dev/null; then …

관련 정보