web-dev-qa-db-ja.com

Firefoxでカスタムプロトコルハンドラーを使用してシェルスクリプトを実行しますか?

私がやりたいのは、ローカル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

成功なし

5
user1092284

問題が見つかりました

ファイルの先頭に#!/bin/bashを入れませんでした。シェルスクリプトは、インタープリタースクリプトとしてではなく、バイナリ実行可能ファイルまたは何かと同じように基本的に考えていました。ターミナルで直接実行するためにその行が必要なかったからです。別のプログラムから実行するには、bashを介して実行する必要があることを忘れていました

そのため、その行がスクリプトの先頭にあると、カスタムリンクを実行するプログラムとしてfirefoxからシェルスクリプトを選択でき、リンクは最初の引数としてスクリプトに正常に渡されます。

2
user1092284