次の内容を含む "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
。 2番目のコロンの前に別の文字列があるはずですが、その文字列が空のものと同じです。
あなたの行10
[ -z "$1" ] && { "$BROWSER"; exit; }
1つの潜在的な問題は空になる可能性がある$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}"