올바른 권한으로 사용자 정의 스크립트를 실행할 때 권한이 거부되었습니다.

올바른 권한으로 사용자 정의 스크립트를 실행할 때 권한이 거부되었습니다.

다음 내용이 포함된 "linkhandler"라는 스크립트를 /bin/ 폴더에 다운로드했습니다. 파일 권한을 부여했으며 이는 ls -lah의 출력입니다.

-rwxrwxrwx 1 root 861 Jul 8 13:12 linkhandler

명령줄에서 linkhandler를 실행하면 다음과 같은 결과가 나타납니다.

/usr/bin/linkhandler: 10: /usr/bin/linkhandler: : Permission denied

무슨 일이 일어날 수 있나요? usr 폴더에 있는 파일의 권한도 확인했습니다.

도움이 된다면 스크립트의 내용은 다음과 같습니다.

  1 #!/bin/sh
  2
  3 # Feed script a url or file location.
  4 # If an image, it will view in sxiv,
  5 # if a video or gif, it will view in mpv
  6 # if a music file or pdf, it will download,
  7 # otherwise it opens link in browser.
  8
  9 # If no url given. Opens browser. For using script as $BROWSER.
 10 [ -z "$1" ] && { "$BROWSER"; exit; }
 11
 12 case "$1" in
 13     *mkv|*webm|*mp4|*youtube.com/watch*|*youtube.com/playlist*|*youtu.be*|*hooktube.com*|*bitchute.com*)
 14         setsid mpv --input-ipc-server=/tmp/mpvsoc$(date +%s) -quiet "$1" >/dev/null 2>&1 & ;;
 15     *png|*jpg|*jpe|*jpeg|*gif)
 16         curl -sL "$1" > "/tmp/$(echo "$1" | sed "s/.*\///")" && feh -a "/tmp/$(echo "$1" | sed "s/.*\///")"  >/dev/null 2>&1 & ;;
 17     *mp3|*flac|*opus|*mp3?source*)
 18         setsid tsp curl -LO "$1" >/dev/null 2>&1 & ;;
 19     *)
 20         if [ -f "$1" ]; then "$TERMINAL" -e "$EDITOR $1"
 21         else setsid "$BROWSER" "$1" >/dev/null 2>&1 & fi ;;
 22 esac

답변1

/usr/bin/linkhandler: 10: /usr/bin/linkhandler: : Permission denied

이는 스크립트를 실행하는 셸의 오류 메시지입니다. 읽기가 다소 어색하지만 10거기에 줄 번호가 있을 수 있으며 : :오류 메시지 앞에 이상한 이중 콜론이 있다는 점은 주목할 가치가 있습니다 Permission denied. 두 번째 콜론 앞에 또 다른 문자열이 있어야 하는데 해당 문자열이 비어 있는 것과 같습니다.

귀하의 라인 10은

[ -z "$1" ] && { "$BROWSER"; exit; }

한 가지 잠재적인 문제는 $BROWSER비어 있을 수 있다는 것입니다. 스크립트 이름이 다시 나타나는 이유나 null 값으로 인해 오류가 발생하는 이유는 여전히 설명되지 않습니다. 이제 이것을 복제해 봅시다:

$ cat foo.sh
#!/bin/dash
unset FOO
"$FOO" 
$ ./foo.sh
./foo.sh: 3: ./foo.sh: : Permission denied

Dash, Debian 및 Ubuntu에서 /bin/sh빈 메시지로 명령을 실행하는 데 대한 오류 메시지는 매우 유사해 보이며 실제로 어떤 이유로 스크립트 이름이 오류에서 반복됩니다. (Bash에서는 오류 메시지가 다릅니다.)

이런 관점에서 볼 때 문제는 $BROWSER"비어 있음"에 있습니다. 적절한 경로를 사용하여 [ -z "$BROWSER" ]기본값을 확인하거나 제공할 수 있습니다 ."${BROWSER-/usr/bin/sensible-browser}"

관련 정보