Linux
權限被拒絕執行具有正確權限的自定義腳本
我在 /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 的錯誤消息。讀起來有點尷尬,但
10
which 可能是行號,值得注意的: :
是錯誤消息之前的奇怪的雙冒號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}"