2013-07-19 2 views
6

나는 이것을 찾기 위해 주위를 고글 거리고 있었지만, 아무것도 찾을 수 없었다. 대답은 간단합니다.셸 스크립트를 sh 대신 bash에서 실행하도록하는 방법이 있습니까?

다른 사람들이 여러 가지 목적으로 실행할 수있는 쉘 스크립트를 작성 중 일부는 "bash"대신 "sh"로 스크립트를 호출 할 수 있습니다.

스크립트에는 일반 쉘 환경에서 작동하지 않고 bash가 필요하지 않은 도구가 있습니다. "sh"로 호출 했더라도 bash에서 스크립트를 강제 실행하는 방법이 있습니까?

+0

@shellter을 : 당신이 무슨 뜻 생각'은/usr/빈/ENV ', not /'/ bin/env'; 예를 들어, 나의 시스템은'/ ​​bin/env'을 가지고 있지 않습니다. [이 질문] (http://unix.stackexchange.com/q/29608/10454) 및 [내 대답] (http://unix.stackexchange.com/a/29620/10454)도 참조하십시오. –

+0

이 질문은 유용하며 여전히 규칙을 준수 할 수 있습니다. "스크립트 대신 sh 대신 bash로 강제 실행하려면 어떻게해야합니까?" (제목과 거의 동일) – Programster

답변

24

As Richard Pennington says는 그렇게 할 수있는 권리 방법은 스크립트의 첫 번째 라인으로

#!/bin/bash 

하는 것입니다.

그러나 사용자가 명시 적으로 sh을 사용하여 호출하면 도움이되지 않습니다. 예를 들어, 입력 할 경우

sh your-script-name 

#! 행이 무시됩니다.

당신은 그 일에서명을 방지 정말 수 있지만, 스크립트의 상단에 이런 식으로 뭔가를 추가하여 억제 할 수 있습니다

#!/bin/bash 

if [ ! "$BASH_VERSION" ] ; then 
    echo "Please do not use sh to run this script ($0), just execute it directly" 1>&2 
    exit 1 
fi 

또는 당신은 같은 것을 할 수있는 :

#!/bin/bash 

if [ ! "$BASH_VERSION" ] ; then 
    exec /bin/bash "$0" "[email protected]" 
fi 

하지만 아주 쉽게 잘못 될 수 있습니다. 예를 들어 일반적으로 스크립트 이름 인 $0이 실제 호출 할 때 사용할 수있는 이름이라는 보장은 없습니다. 잘못 입력하거나 시스템이 약간 잘못 구성된 경우이 작업이 무한 루프로 진행될 수 있습니다.

오류 메시지 접근을 권장합니다.

(참고 : 오류 메시지가 사용자에게 도움이 될 수있는 스크립트의 이름을 포함, 그래서 난 그냥이 답변을 수정했습니다.)

+0

답장을 보내 주셔서 감사합니다. 상단에 지정된 행이 있고 bash 버전을 검사하여 오류가 발생할 수 있는지를 알 수 없습니다. 이것은 멋지게 할 것입니다, 고마워요! – Locane

+0

종종 다른 쉘 (예 : ksh 또는 zsh)이 작동 할 수 있습니다. 그들도 확인하고 싶을 것입니다. – Demi

2
#! /bin/bash 
# The rest of your script.