我想要做的是能够从本地网站的链接启动外部程序。
我通过在 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 脚本作为运行自定义链接的程序,并且该链接将作为第一个参数成功传递到脚本中。