Linux

權限被拒絕執行具有正確權限的自定義腳本

  • July 8, 2019

我在 /bin/ 文件夾中下載了名為“linkhandler”的腳本,其內容如下。我已授予文件權限,這是 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
/usr/bin/linkhandler: 10: /usr/bin/linkhandler: : Permission denied

這是來自執行腳本的 shell 的錯誤消息。讀起來有點尷尬,但10which 可能是行號,值得注意的: :是錯誤消息之前的奇怪的雙冒號Permission denied。就好像在第二個冒號之前應該有另一個字元串,但是那個字元串是空的。

你的第 10 行是

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

一個潛在的問題是$BROWSER可能是空的。這仍然不能解釋為什麼腳本的名稱會再次出現,或者空值是否會導致該錯誤。所以讓我們嘗試複製它:

$ 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}"

引用自:https://unix.stackexchange.com/questions/529013