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
which
type
완전히 잘못된 일을 하지 않는 한 중복됩니다 .사용하지 마세요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 …