是否使用 Firefox 中的自定义协议处理程序来运行 Shell 脚本?

是否使用 Firefox 中的自定义协议处理程序来运行 Shell 脚本?

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

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

network.protocol-handler.external.myprotocol;true
network.protocol-handler.warn-external.myprotocol;true

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

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

shell 脚本最初只包含以下行

$1

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

#./run_program.sh gedit 

或者

#./run_program.sh /home/ciaran/test_program

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

echo "testing" > /testing/file.txt

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

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

我也尝试过改变我的about:config以包含

network.protocol-handler.expose.camara;true

network.protocol-handler.app.camara;path/to/shell/script

没有成功

答案1

发现问题

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

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

相关内容