私がやりたいのは、ローカルWebサイトのリンクから外部プログラムを起動できるようにすることです。
About:configで次の変数を設定して、Firefoxでカスタムプロトコルハンドラーを定義しました。
network.protocol-handler.external.myprotocol;true
network.protocol-handler.warn-external.myprotocol;true
これにより、myprotocol:///path_to_program_I_want_to_run
という形式のリンクをクリックすると、firefoxが[アプリケーションの起動]ダイアログボックスを開き、使用するシェルスクリプトを参照して、firefoxに実行を指示します。残念ながら、スクリプトはまったく実行されていないようです。
ファイルのアクセス権を777に設定したので、firefoxで問題なく実行できます
シェルスクリプトには元々行のみが含まれていました
$1
リンクのパスが最初の引数として渡され、すぐにプログラムとして実行されるという考え方です。これは、次のようなコマンドを使用して自分でスクリプトを実行したときにうまく機能しました
#./run_program.sh gedit
または
#./run_program.sh /home/ciaran/test_program
テスト用のスクリプトには、次の行のみが含まれています
echo "testing" > /testing/file.txt
ここで、「テスト」は777許可を持つディレクトリです。また、/testing/
は実際にファイルシステムのルートにあることに注意してください(なぜそこに置いたのか覚えていないのですが!)ので、相対パスと絶対パスが混ざっていないだけです
繰り返しますが、これは端末から実行すると完全に正常に実行され、file.txt
が適切な場所に作成されます。ただし、firefoxでは、実行するアプリケーションを選択するオプションが与えられ、そのシェルスクリプトを選択しますが、何も実行されないようです。 file.txt
はまったく作成されませんが、許可に関する問題は確認できません。そのため、firefoxはスクリプトを実行していないようです。
about:config
を含むように変更しようとしました
network.protocol-handler.expose.camara;true
そして
network.protocol-handler.app.camara;path/to/Shell/script
成功なし
問題が見つかりました
ファイルの先頭に#!/bin/bash
を入れませんでした。シェルスクリプトは、インタープリタースクリプトとしてではなく、バイナリ実行可能ファイルまたは何かと同じように基本的に考えていました。ターミナルで直接実行するためにその行が必要なかったからです。別のプログラムから実行するには、bash
を介して実行する必要があることを忘れていました
そのため、その行がスクリプトの先頭にあると、カスタムリンクを実行するプログラムとしてfirefoxからシェルスクリプトを選択でき、リンクは最初の引数としてスクリプトに正常に渡されます。