간단한 awk 프로그램 파일을 만들었습니다./media/ravan/data/program
암호:
#! /usr/bin/awk -f
BEGIN { print "Don’t Panic bro!" }
터미널에서 실행하는 경우:
ravan@ravan:/media/ravan/data/program$ ls
awkTest.awk testawk.awk
ravan@ravan:/media/ravan/data/program$ chmod +x awkTest.awk
ravan@ravan:/media/ravan/data/program$ ./awkTest.awk
bash: ./awkTest.awk: Permission denied
mount
출력 섹션
/dev/sda3 on /media/ravan/data type fuseblk (rw,nosuid,nodev,allow_other,default_permissions,blksize=4096)
산출ls -l
ravan@ravan:~$ ls -l /media/ravan/data/program
total 1
-rw------- 1 ravan ravan 55 Nov 9 15:03 awkTest.awk
-rw------- 1 ravan ravan 52 Nov 9 13:29 testawk.awk
답변1
파일 시스템 마운트에 무슨 일이 일어나고 있는지 모르겠지만 문제를 해결하는 것은 매우 간단합니다. Shebang이 실제로 무엇을 하고 있는지 이해하면 됩니다.
파일이 실행 가능으로 표시되어 있고 이를 실행하려고 하면 파일의 처음 2바이트가 확인됩니다. 그렇다면 #!
쉘은 파일의 첫 번째 행을 명령으로 실행한 다음 해당 명령에 대한 인수로 파일 자체의 경로를 실행합니다.
즉, #!/bin/bash
이라는 파일의 첫 번째 줄에 있는 내용은 /tmp/myscript.sh
으로 실행됩니다 /bin/bash /tmp/myscript.sh
.
마찬가지로, 실행 시 #!/usr/bin/awk -f
첫 번째 줄은 ./awkTest.awk
(또는 설치 문제가 방해하지 않는 경우) 이 됩니다 /usr/bin/awk -f ./awkTest.awk
.
해결책은 그냥 실행하는 것입니다. awk -f awkTest.awk
그러면 스크립트가 예상대로 실행됩니다.
awk
있기 때문에 주의해 주세요설명했다컴파일하는 대신 noexec
장치의 설치 옵션에 플래그를 지정하여 awk 스크립트를 저장하세요.에 익숙해스크립트를 실행하지 못하게 합니다. 그것은 단지 당신이 그것을 실행하는 것을 막을 것입니다실행 파일로. 따라서 여러분이 해야 할 일은 awk
바이너리 실행 파일( /usr/bin/awk
)을 실행하는 것뿐입니다.읽다awk
물론 귀하의 스크립트는 noexec
이 플래그에 의해 차단되지 않으며 귀하가 작성한 스크립트를 실행합니다.