我在 /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
答案1
/usr/bin/linkhandler: 10: /usr/bin/linkhandler: : Permission denied
这是来自运行脚本的 shell 的错误消息。读起来有点尴尬,但是其中10
可能是行号,值得注意的是: :
错误消息之前的奇怪的双冒号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}"