在 Firefox 中使用自定义协议处理程序来运行 shell 脚本?

use*_*284 5 firefox scripts protocol

我想要做的是能够从本地网站中的链接启动外部程序。

我通过在 about:config 中设置以下变量,在 firefox 中定义了一个自定义协议处理程序

network.protocol-handler.external.myprotocol;true
network.protocol-handler.warn-external.myprotocol;true
Run Code Online (Sandbox Code Playgroud)

当我单击表单中的链接时,这成功地导致 firefox 打开一个“启动应用程序”对话框myprotocol:///path_to_program_I_want_to_run,然后我浏览到我想要使用的 shell 脚本并告诉 firefox 运行它。不幸的是,脚本似乎根本没有运行。

我已将文件权限设置为 777,因此 Firefox 运行它应该不会有任何问题

shell 脚本最初只包含这一行

$1
Run Code Online (Sandbox Code Playgroud)

这个想法是链接的路径将作为第一个参数传入并立即作为程序运行。当我使用类似的命令自己运行脚本时,这很好用

#./run_program.sh gedit 
Run Code Online (Sandbox Code Playgroud)

或者

#./run_program.sh /home/ciaran/test_program
Run Code Online (Sandbox Code Playgroud)

现在用于测试目的的脚本仅包含该行

echo "testing" > /testing/file.txt
Run Code Online (Sandbox Code Playgroud)

其中“testing”是一个具有 777 权限的目录。另请注意,它/testing/实际上位于我的文件系统的根目录(尽管我不记得我为什么把它放在那里!),所以我没有混淆相对路径和绝对路径

同样,当我从终端运行它时,它运行得非常好,并且file.txt是在正确的位置创建的。但是,使用 Firefox,我可以选择要运行的应用程序,我选择了该 shell 脚本,但它似乎没有做任何事情。 file.txt根本没有创建,尽管我看不到权限问题。所以 firefox 似乎没有运行脚本。

我也尝试将我的更改about:config为包含

network.protocol-handler.expose.camara;true
Run Code Online (Sandbox Code Playgroud)

network.protocol-handler.app.camara;path/to/shell/script
Run Code Online (Sandbox Code Playgroud)

没有成功

use*_*284 2

发现问题了

我没有放在#!/bin/bash文件的顶部。我基本上将 shell 脚本视为二进制可执行文件或其他东西,而不是解释为脚本,因为我不需要该行直接在终端中运行它。我忘记了要从另一个程序运行它必须运行它bash

因此,一旦该行位于脚本顶部,您就可以选择 Firefox 中的 shell 脚本作为运行自定义链接的程序,并且该链接将作为第一个参数成功传递到脚本中。