스크립트는 exec 파티션(/home/~~~ 아래)에 있으며 +x 플래그(-rwxr-xr-x)가 있습니다.
Bash 쉘(스크립트 없이)에서는 실행 가능하지만 스크립트에서는 실행 가능하지 않습니다. 스크립트는 매우 간단합니다.
#!/bin/bash
data=cat $PWD/.git/config | awk '{for(i=1;i<NF;i++)if($i~"merge")print$(i+2)}'
echo data : $data
결과:
/home001/myaccount/uploader.sh: line 3: /home001/myaccount/mydirectory/.git/config: Permission denied
대상 파일에 대한 권한은 아래와 같이 기호화된 777입니다.
lrwxrwxrwx
그러나 실행 가능하며 bash 명령줄에서 잘 실행됩니다.
myaccount@myserver:~/mydirectory$ cat $PWD/.git/config|awk '{for(i=1;i<NF;i++)if($i~"merge")print$(i+2)}'
mybranch
스크립트에는 +x 플래그가 있으며 실행 가능한 파티션에 있습니다. 스크립트 없이도 실행할 수 있지만 스크립트에서는 실행할 수 없습니다. 왜?
답변1
문제는 다음 줄에 있습니다.
data=cat $PWD/.git/config
data
이는 해당 값을 갖도록 쉘 변수를 일시적으로 설정한 cat
다음 파일 실행을 시도합니다 $PWD/.git/config
. 아마도 당신이 그것을 하고 싶지 않을 것이기 때문에 이것은 불행한 일입니다.
다음을 수행할 수 있습니다.
data=$(cat $PWD/.git/config | awk '{for(i=1;i<NF;i++)if($i~"merge")print$(i+2)}')
위의 명령은 명령을 실행하고 cat
출력을 awk
awk의 출력으로 보내고 변수에 저장합니다 data
. 그것이 당신이 원하는 것이라면 이것은 cat
중복됩니다. 위의 내용을 다음으로 바꾸세요.
data=$(awk '{for(i=1;i<NF;i++)if($i~"merge")print$(i+2)}' $PWD/.git/config)
오류 메시지를 설명하세요.
/home001/myaccount/uploader.sh: line 3: /home001/myaccount/mydirectory/.git/config: Permission denied
위에서 우리는 uploader.sh
실행이 진행되고 있음을 알고 있습니다. 이는 권한에 문제가 없음을 나타냅니다 uploader.sh
. 오류는 3행에서 발생합니다. 여기서 uploader.sh
명령은 다음과 같습니다.
data=cat $PWD/.git/config | awk '{for(i=1;i<NF;i++)if($i~"merge")print$(i+2)}'
Permission denied
쉘이 이 행을 실행하는 동안 오류가 발생했습니다.