awk 프로그램을 실행할 수 없습니다

awk 프로그램을 실행할 수 없습니다

간단한 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이 플래그에 의해 차단되지 않으며 귀하가 작성한 스크립트를 실행합니다.

관련 정보