私は実験を始めていますクランチバン(Debianをベースにしており、ターミネーター) を Web 開発環境として使用していますが、 の動作に苦労していますxdg-open
。私は OSX のバックグラウンドを持っているので、この質問がわかりにくい場合はご容赦ください。
xdg-open http://www.google.com
で URL を開いて、同じターミナル ウィンドウを引き続き使用して作業できるようにしたいと思います( open
OSX ではこれが機能します)。現在、 を使用すると、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 を閉じるので、呼び出しがよりクリーンになるので、私はdetach
overを好みます。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 の内容を保護するのに役立ちます。