2013-10-23 8 views
13

나는 bash 스크립트를 가지고 있으며 bash가 필요합니다.sh로 bash 스크립트 실행

또 다른 사람은

sh script_name.sh 

그것을 실행하려고 그리고 쉬가 자신의 유통에 돌진하는 심볼릭 링크가 있기 때문에 실패합니다.

#!/bin/sh 
bash script_name.sh 

목표는 돌진하는 심볼릭 링크를 가진 시스템에서 bash에와 쉬에 의해 보통 .sh 스크립트를 실행하는 것입니다 :

$ ls -la /bin/sh 
lrwxrwxrwx 1 root root 4 Aug 25 16:06 /bin/sh -> dash 

나는 래퍼 스크립트를 사용하는 아이디어를 가지고있다. 다른 사람 아무것도, 당신은 같은 것을 할 수 전에 스크립트에서

+0

을 './script_name.sh'를 그냥하면 어떨까요? – fedorqui

+2

다른 사용자에게'bash script_name.sh'를 실행시켜 주시겠습니까? - 래퍼도 작동합니다. 귀하의 질문은 무엇인가? – John3136

+0

스크립트를 보여줘야합니다. 원하는 것은 Posix'sh' 표준을 엄격하게 준수하도록 스크립트를 변경하는 것입니다. –

답변

25

글쎄, 일반적으로 말할 위해 shebang를 사용 올바른 인터프리터를 사용하는 쉘 :

#!/bin/bash 

# your script here 

당신은 hav

chmod +x my_script.sh 

을 그리고 사용자가 그것을 시작하자 : 전자 실행 가능 스크립트를 설정하는 래퍼 스크립트를 사용하는 것보다 간단 보인다

./my_script.sh 

. 당신은 배쉬로 스크립트를 실행 JBR 테스트를 사용할 수 있습니다

경우에도 사용자의 사용 SH/대시 또는 인터프리터와 같은 어떤 SH :

#!/bin/bash 

if [ -z "$BASH_VERSION" ] 
then 
    exec bash "$0" "[email protected]" 
fi 

# Your script here 

제대로 중 하나와 함께 작동이 방법 :

sh ./my_script.sh 

# or 

bash ./my_script.sh 

# or 

./my_script.sh 
+0

하지만 사용자가 'sh script.sh'를 수행하는 것을 방해하지는 않습니다. – jbr

+0

@jbr : 맞습니다. 일부 코드를 추가했습니다. +1 당신을 위해. – neuro

+0

@neuro 스크립트에 전달 된 매개 변수를 포함하도록 예제를 수정했습니다. – devnull

4

는 :

if [ "$BASH" != "/bin/bash" ]; then 
    echo "Please do ./$0" 
    exit 1 
fi 

또는 더 일반적인 방법을 $BASH_VERSION을 사용하고 있습니다 :

if [ -z "$BASH_VERSION" ]; then 
    echo "Please do ./$0" 
    exit 1 
fi 
+0

나는'if [! "$ BASH"];는 더 나은 접근 방법 일 수 있습니다. – devnull

+0

아니요. sh 호환성을 위해 bash가 사용되면'$ BASH'는'/ bin/sh '일 수 있기 때문입니다. – jbr

+0

'/ usr/bin'에서'bash'를 사용할 수 있다면 어떨까요? – devnull