Bash 스크립트 권한이 거부되었습니다. & 잘못된 인터프리터

Kali Linux 64 비트를 사용하고 있습니다.

시작하는 데 2 개의 인수를 사용하는 python 스크립트를 만들었습니다. 터미널에서 사용한 명령 기록에서 똑같은 경로를 입력하거나 검색 할 때마다 입력하고 싶지 않습니다. 그래서 나는 인수와 함께 파이썬 스크립트를 호출하는 간단한 스크립트를 만들기로 결정했습니다.

#! /bin bash python CreateDB.py ./WtfPath ./NoWtfPath/NewSystem/ 

터미널에서 사용하는 것과 똑같은 명령입니다. 하지만 스크립트 파일을 실행하려고하면 오류 메시지가 나타납니다.

bash: ./wtf.sh: /bin: bad interpreter: Permission denied 

wtf.sh에는 실행 권한이 있습니다.

무슨 일입니까?

답변

여기에 슬래시 대신 공백이 있습니다.

 #! /bin bash  

다음과 같아야합니다.

 #! /bin/bash  

또는 간단히

 #!/bin/bash  

(첫 번째 공백은 선택 사항). shebang (#!) 뒤에는 실행 파일 경로가 와야하며 그 뒤에 가 올 수 있습니다. 하나의 인수 , 예 :

 #!/usr/bin/env sh  

이 경우 /usr/bin/env는 실행 파일입니다. 자세한 내용은 man env를 참조하세요.

/bin는 디렉토리를 나타냅니다.

댓글

  • 젠장, 바보 야! 감사! ' 그것을 보지 못했습니다 …
  • #!/bin/sh를 사용하는 습관을들이는 것이 좋습니다 (대신 of #!/bin/bash) bash 기능을 사용하고 있다는 사실을 알지 못하는 경우
  • @ G-Man 청소 해 주셔서 감사합니다. 조금 위로. WRT bash vs. sh, 나는 질문의 패턴을 따랐습니다 (내 경향은 내가 알 때만 sh을 사용하는 것이지만 ' m bash 기능을 사용하지 않습니다 .
  • Ubuntu 터미널에서는 which bash가 유용합니다. 그러면 /bin/bash가 반환됩니다. 내 Bash 스크립트 맨 위에 #!/bin/bash를 추가합니다. 그런 다음 Bash 스크립트를 실행하려면 bash foo.sh를 입력합니다. 따라서 which sh도 같은 방식으로 사용됩니다. sh foo.sh
  • @ G-Man, 근무하는 세상에는 불행한 수의 사람들이 있습니다. ' Bash 기능을 사용하는지 여부를 알아 합니다. 대부분의 경우 ' 스크립트를 실행하는 것보다 아무 실행하지 않는 (Bash가 shebang에 지정되었지만 누락 되었기 때문에) 예상치 못한 것 (/bin/sh은 Bash가 아니고 스크립트에 눈에 띄지 않는 Bashism이 있기 때문입니다). 여기를 참조하세요.

답변

스크립트가있는 마운트 지점에 “noexec”속성이있는 경우 원하는 모든 것을 차단할 수 있지만 여전히 작동하지 않지만 스크립트를 인수로 사용하여 인터프리터를 호출하면 그러면 “noexec 마운트에서 다른 스크립트를 실행하려고 시도하지 않습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다