다음 내용이 포함된 "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}"