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
는 디렉토리를 나타냅니다.
댓글
답변
스크립트가있는 마운트 지점에 “noexec”속성이있는 경우 원하는 모든 것을 차단할 수 있지만 여전히 작동하지 않지만 스크립트를 인수로 사용하여 인터프리터를 호출하면 그러면 “noexec 마운트에서 다른 스크립트를 실행하려고 시도하지 않습니다.
#!/bin/sh
를 사용하는 습관을들이는 것이 좋습니다 (대신 of#!/bin/bash
)bash
기능을 사용하고 있다는 사실을 알지 못하는 경우sh
을 사용하는 것이지만 ' m bash 기능을 사용하지 않습니다 .which bash
가 유용합니다. 그러면/bin/bash
가 반환됩니다. 내 Bash 스크립트 맨 위에#!/bin/bash
를 추가합니다. 그런 다음 Bash 스크립트를 실행하려면bash foo.sh
를 입력합니다. 따라서which sh
도 같은 방식으로 사용됩니다.sh foo.sh
/bin/sh
은 Bash가 아니고 스크립트에 눈에 띄지 않는 Bashism이 있기 때문입니다). 여기를 참조하세요.