web-dev-qa-db-ja.com

xdg-openを使用して新しいプロセスでURLを開く

私は Crunchbang (これはDebianに基づいており、 terminator を使用)をWeb開発環境として実験し始めています。私が苦労していることの1つは、 xdg-openの動作。私はOSXのバックグラウンドを持っているので、この質問が濃密になっても許してください。

xdg-open http://www.google.comでURLを開き、同じターミナルウィンドウを引き続き使用できるようにしたいと思います(OSXでのopenの機能です)。現在、xdg-openを使用すると、ブラウザウィンドウを閉じるか、ctrl + cで手動で終了するまで、現在のタブ/セッションが占有されます。新しいプロセスを開始して、URLを開き、ページ上のデータを参照し、追加のタブ/ウィンドウを開かずに同じタブ/ウィンドウで使用できるようにしたいと思います。

14
Nick Tomlin

奇妙なことに、私のDebianでは、箱から出してすぐに動作します。バックグラウンドで実行してみてください:

xdg-open http://www.google.com &

これらの行を~/.bashrcファイルに追加することで、これを関数にすることができます。

function open () {
    xdg-open "$*" &
}

その後、単にopen http://www.google.comを実行すると、バックグラウンドで実行されます。

13
terdon

xdg-open http://www.google.com &を使用してプロセスをバックグラウンドジョブとして開始するのではなく、現在のシェルから切り離したい場合は、 detach ユーティリティを使用します。

detach xdg-open http://www.google.com

これのエイリアスを作成できます。 detachよりもNohupの方が好きです。デフォルトでstdin stdoutとstderrを閉じるため、呼び出しがよりクリーンになります。

8
Dan D.

xdg-openは、プログラムの終了を待ちます。これは仕様によるものです。プログラムがテキストモードプログラムの場合、ターミナルのフォアグラウンドにとどまる必要があります。プログラムがGUIのプログラムであっても、この動作はスクリプトからxdg-openが使用され、ファイルが編集された後にスクリプトが何かを実行したい場合に役立ちます(たとえば、新しいバージョンをどこかに送信するか、別の方法で何かを作成します)新しいバージョン)。

待ちたくない場合は、バックグラウンドでxdg-openを実行してください。最後にアンパサンドを置くことにより、任意のシェルコマンドをバックグラウンドで実行できます。

xdg-open http://www.google.com &

一部のプログラムでは、xdg-openはすぐに戻ります。実際に発生するのは、xdg-openが呼び出すプログラムがすぐに戻ることです。これは通常、単一のインスタンスですべてのファイルを開くGUIプログラムで発生します。2回目に起動すると、実行中のインスタンスにファイルを開くように通知するメッセージが送信され、すぐに終了します。

terdon's answerDan D.によるNohup の説明を組み合わせることで、私が望んでいることを正確に実行する関数を作成しました。

  1. 端末にanyをまったく書き込まずに、選択したアプリでファイルを開きます。
  2. プロセスを切り離して、ターミナルウィンドウを閉じることができるようにします。
  3. アプリが生成したエラーを端末に書き込みません。

これを.bashrc/.zshrcファイルに追加しました:

function open () {
  Nohup xdg-open "$*" > /dev/null 2>&1
}

/dev/null 2>&1の説明については stdoutおよびstderrの非表示に関するこの説明 を参照してください。

1
LondonRob

コマンドライン(ループ)からWebページを開く必要がある場合は、スクリプトを開始する前にブラウザーを開くだけです。

この場合、最初のリンクの後でブラウザが閉じられるのを待たずに、すべてを新しいタブで開きます。

0
Valentina Walx

今日のように、これらのオプションはどれも私にとってはうまくいきませんでした。 OPが "xdg-openを使用する"と言っていたことを私は完全に承知しています。

最終的には、シンプルなchrome https://google.es --new-window || chromium https://google.es --new-window || firefox https://google.esを実行してしまいました。

これらの3つのブラウザーがない場合は、ご希望の順序で適切なブラウザーを使用してください。

注:Firefoxは何も追加せずに新しいウィンドウを開きました。ケースが適切に機能しない場合は、firefox https://google.es -new-instance -new-windowを使用してください。これは、Firefoxフラグ用の-の1つにすぎません。

0
m3nda

これを試して:

DISPLAY=:0.0; xdg-open '<url>'

この手法を使用して、magnet:// URLをBit TorrentクライアントVuzeにエンキューします。

ssh someserver "DISPLAY=:0.0; xdg-open 'http://www.google.com/'"

単一引用符は、シェルがURLの解釈を試みないように、URLのコンテンツを保護するのに役立ちます。

0
slm

disownは、このための正しいコマンドです。

読みやすくするために、2つの関数を使用します。

f_x()
{
   xdg-open "$1" &
   disown
}

x()
{
   f_x "$*" > /dev/null 2>&1
}
0
user352672