다음과 같은 내용으로 실행 파일을 작성하고 실행하면 자체적으로 삭제됩니다.
어떻게 작동합니까?
#!/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.