+x에도 불구하고 스크립트 실행 권한이 거부되었습니다.

+x에도 불구하고 스크립트 실행 권한이 거부되었습니다.

스크립트는 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출력을 awkawk의 출력으로 보내고 변수에 저장합니다 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쉘이 이 행을 실행하는 동안 오류가 발생했습니다.

관련 정보