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

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

私は実験を始めていますクランチバン(Debianをベースにしており、ターミネーター) を Web 開発環境として使用していますが、 の動作に苦労していますxdg-open。私は OSX のバックグラウンドを持っているので、この質問がわかりにくい場合はご容赦ください。

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

答え1

不思議なことに、私の Debian ではそのままでもそのように動作します。バックグラウンドで実行してみてください:

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

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

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

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

答え2

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

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

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

答え3

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

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

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

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

答え4

これを試して:

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

私はこのテクニックを使って、magnet:// URL を Bit Torrent クライアント Vuze にキューに入れます。

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

一重引用符は、シェルが URL を解釈しないように URL の内容を保護するのに役立ちます。

関連情報