2011-12-27 6 views
2

두 쉘뱅이 셸 스크립트를 가지고 있는데, 첫 번째 쉘은 #!/bin/sh을 말하고 몇 줄은 #!/usr/bin/env 파이썬입니다.사이에 쉘 스크립트 변경 셸

이 스크립트에 실행 권한이 주어지고 ./script.sh로 실행되면 스크립트는 제대로 작동하고 첫 번째 부분에서는/bin/sh를 사용하고 후반 부분에서는 python 해석기를 사용합니다.

그러나 스크립트가 sh script.sh로 실행되면 두 번째 스크립트가 인식되지 않고 스크립트가 실패합니다. 스크립트가 명시 적으로 sh script.sh로 실행되면 인터프리터를 강제로 변경할 수 있습니까?

내가 쉬 script.sh로 실행 도구를 통해 스크립트를 실행해야하기 때문에 이것이 필요한 이유

+0

실제 도움을 얻으려면 스크립트를 보여주십시오. –

+0

@Basile Starynkevitch 실제로 파이썬을 실행할 필요가 있지만 도구는 sh script.sh로 쉘 스크립트 만 실행하므로 파이썬으로 인터프리터를 변경해야합니다 – Rnet

+2

'sh script.sh'로 실행하면 shebangs는 모두 무시. 두 번째 것은 무시됩니다. 커널은 첫 번째 커널 만 봅니다. –

답변

0

은 script.sh 스크립트가 직접 파이썬 인터프리터 호출이 있습니다

#!/bin/sh 
# include full path if needed 
python (your python interpreter arguments) 
3

을 내가 아는 한 하나의 스크립트에는 두 개의 shebang 줄을 사용할 수 없습니다. 당신이 스크립트를 호출 한 후 다음 파이썬 코드를 실행하는 다른 스크립트에서 그것을 가지고해야하는 경우

  • 가 열 한
  • 에서 시작하는 첫 번째 줄에

    1. - 경우에만 shebang 작동 할

      python path/to/the/script.py 
      
    1

    더 좋은 방법을 수행하여이 쉘 here document을 사용하는 것입니다. 이런 식으로 뭔가가 :

    #!/bin/sh 
    curdir=`pwd` 
    /usr/bin/env python <<EOF 
    import os 
    print os.listdir("$curdir") 
    EOF 
    

    이 방법, 당신은 두 개의 별도의 파일에 코드를 배포 할 필요가 없습니다.

    여러분도 알다시피, 파이썬 코드에서 쉘 변수에 접근 할 수 있습니다.