쉘 독립적 스크립트를 작성하는 방법은 무엇입니까? ksh
, sh
및 에서 실행되는 스크립트를 실행할 수 있기를 원합니다 bash
.
예를 들어, 스크립트에 on 대신 whence ls
에 실행될 줄이 있는 경우 다음과 같은 내용을 갖고 싶습니다.ksh
sh
if (ksh)
then whence ls
if (sh)
then whereis ls
값을 사용할 수 있나요 $SHELL
? 아니면 다른 방법이 있나요?
답변1
Unix 쉘 스크립트에서 일반적으로 볼 수 있는 패턴 중 하나는 공통 함수(예: )로 명명된 실행 파일의 변수를 사용하는 것입니다 $ECHO
. 그런 다음 무엇을 설정해야 하는지 결정하는 하나 또는 두 개의 최상위 함수를 갖게 됩니다 $ECHO
.
일단 설정되면 $ECHO
코드 전체에 다음이 표시됩니다.
$ECHO "hi"
이렇게 하면 스크립트의 기능과는 전혀 관련이 없고 스크립트에서 사용하는 플랫폼 인터프리터만 사용하는 수많은 if..then..else 블록을 코드에 추가하지 않아도 됩니다.
따라서 실행 중인 인터프리터/플랫폼을 기반으로 교체하고 싶은 중요한 프로그램에 대해 동일한 작업을 수행할 수 있습니다.
if (ksh)
then
ECHO=echo1
FILEFIND=whence
else if (sh)
ECHO=echo2
FILEFIND=whereis
else
ECHO=echo3
FILEFIND=which
fi
이렇게 해야 하나요?
스크립트를 이식 가능하게 만들고 인터프리터나 실행 파일의 가용성을 고려한다면 가장 낮은 공통 분모, 즉 /bin/sh
.
Oracle과 다른 업체들이 어떻게 이를 수행하는지 살펴보십시오. 일반적으로 사용할 설치 프로그램을 제공합니다 /bin/sh
. 이는 Solaris, AIX 및 Linux와 같은 다양한 Unix 지원을 시작할 때 가장 낮은 공통 분모입니다.
Novell이 작성한 다음 제목의 가이드를 확인하세요.스크립트를 이식 가능하게 만들기. 다양한 쉘의 계보와 그 중 일부의 공통 명령 세트를 다루고, 미묘한 부분을 처리하는 방법에 대한 팁을 제공합니다.
답변2
다음과 같이 다른 쉘 프로세스를 시작하여 이를 수행해야 할 수도 있습니다.
if [ -x /bin/ksh ]
then
output=`/bin/ksh whence ls`
fi
if [ -x /bin/sh ]
then
output=`/bin/sh which ls`
fi