다른 쉘에서 다른 명령을 사용하는 스크립트 작성

다른 쉘에서 다른 명령을 사용하는 스크립트 작성

쉘 독립적 스크립트를 작성하는 방법은 무엇입니까? ksh, sh및 에서 실행되는 스크립트를 실행할 수 있기를 원합니다 bash.

예를 들어, 스크립트에 on 대신 whence ls에 실행될 줄이 있는 경우 다음과 같은 내용을 갖고 싶습니다.kshsh

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

관련 정보