다음과 같은 내용으로 실행 파일을 작성하고 실행하면 자체적으로 삭제됩니다.
어떻게 작동합니까?
#!/bin/rm
rm
에 관한 것 #!
입니다. 이 질문은 실행 가능한 스크립트가 #!
작동 하는 방식 으로 표현할 수 있습니다 .
다음과 같은 내용으로 실행 파일을 작성하고 실행하면 자체적으로 삭제됩니다.
어떻게 작동합니까?
#!/bin/rm
rm
에 관한 것 #!
입니다. 이 질문은 실행 가능한 스크립트가 #!
작동 하는 방식 으로 표현할 수 있습니다 .
답변:
커널은 줄로 시작하는 줄을 해석하고 #!
이를 사용하여 스크립트 이름을 전달하여 스크립트를 실행합니다. 그래서 이것은 결국 실행됩니다
/bin/rm scriptname
스크립트가 삭제됩니다. 로 ( 스테판 Chazelas가이 지적 , scriptname
그렇지 않으면 어떤 경로에서 발견 된, 즉있는 그대로 전달, 당신은 상대 또는 절대 경로를 지정한 경우 - 여기에 스크립트를 찾기 위해 충분 PATH
당신이 경우 가능성이 emptry 문자열을 포함 앞에 추가되는 PATH
것을 포함하고 스크립트가 현재 디렉토리에 있습니다. echo 스크립트를 사용하여 재생 — #!/bin/echo
— 이것이 어떻게 작동하는지 확인할 수 있습니다.)
으로 홉스는 지적이 스크립트가 실제로 의미 rm
스크립트가 아닌 bash
후자로 시작하는 것입니다 - 스크립트 #!/bin/bash
.
Linux에서의 작동 방식에 대한 자세한 내용은 프로그램 실행 방법을 참조하십시오 . 이 기사의 주석은 다른 플랫폼에 대한 세부 사항을 제공합니다. #!
shebang이라고하며, 해당 용어를 검색하여 많은 정보를 찾을 수 있습니다 ( 제안 해 준 Aaron 에게 감사합니다 ). 으로 JLP는 지적, 당신은 또한 "파운드 강타"또는 "해시 뱅"(같은 언급 찾을 수 있습니다 #
사용하지 않는 국가에서 - 일반적으로 "파운드"로 알려져있다 £
- 또는 "해시"및 !
"쾅"으로 ). Wikipedia 에 더 많은 정보가 있습니다.
rm
의 경로 가됩니다. 즉, 프로세스가 수행 한 execve () 시스템 호출에 대한 첫 번째 인수입니다. 이 같은 스크립트를 실행하는 경우 일반적으로 ./scriptname
될 것입니다, ./scriptname
당신이 그것을 호출하는 경우 scriptname
, 즉 것 /path/to/scriptname
곳 /path/to
의 항목입니다 $PATH
해당 스크립트가 발견 된 곳은. 일반적으로 scriptname
빈 문자열이 $PATH
있고 현재 디렉토리에서 scriptname
와 같이 스크립트를 호출 한 경우 에만 수행됩니다 scriptname
.