运行具有正确权限的自定义脚本时权限被拒绝

运行具有正确权限的自定义脚本时权限被拒绝

我在 /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}"

相关内容