私は Crunchbang (これはDebianに基づいており、 terminator を使用)をWeb開発環境として実験し始めています。私が苦労していることの1つは、 xdg-open
の動作。私はOSXのバックグラウンドを持っているので、この質問が濃密になっても許してください。
xdg-open http://www.google.com
でURLを開き、同じターミナルウィンドウを引き続き使用できるようにしたいと思います(OSXでのopen
の機能です)。現在、xdg-open
を使用すると、ブラウザウィンドウを閉じるか、ctrl + c
で手動で終了するまで、現在のタブ/セッションが占有されます。新しいプロセスを開始して、URLを開き、ページ上のデータを参照し、追加のタブ/ウィンドウを開かずに同じタブ/ウィンドウで使用できるようにしたいと思います。
奇妙なことに、私のDebianでは、箱から出してすぐに動作します。バックグラウンドで実行してみてください:
xdg-open http://www.google.com &
これらの行を~/.bashrc
ファイルに追加することで、これを関数にすることができます。
function open () {
xdg-open "$*" &
}
その後、単にopen http://www.google.com
を実行すると、バックグラウンドで実行されます。
xdg-open http://www.google.com &
を使用してプロセスをバックグラウンドジョブとして開始するのではなく、現在のシェルから切り離したい場合は、 detach
ユーティリティを使用します。
detach xdg-open http://www.google.com
これのエイリアスを作成できます。 detach
よりもNohup
の方が好きです。デフォルトでstdin stdoutとstderrを閉じるため、呼び出しがよりクリーンになります。
xdg-open
は、プログラムの終了を待ちます。これは仕様によるものです。プログラムがテキストモードプログラムの場合、ターミナルのフォアグラウンドにとどまる必要があります。プログラムがGUIのプログラムであっても、この動作はスクリプトからxdg-open
が使用され、ファイルが編集された後にスクリプトが何かを実行したい場合に役立ちます(たとえば、新しいバージョンをどこかに送信するか、別の方法で何かを作成します)新しいバージョン)。
待ちたくない場合は、バックグラウンドでxdg-open
を実行してください。最後にアンパサンドを置くことにより、任意のシェルコマンドをバックグラウンドで実行できます。
xdg-open http://www.google.com &
一部のプログラムでは、xdg-open
はすぐに戻ります。実際に発生するのは、xdg-open
が呼び出すプログラムがすぐに戻ることです。これは通常、単一のインスタンスですべてのファイルを開くGUIプログラムで発生します。2回目に起動すると、実行中のインスタンスにファイルを開くように通知するメッセージが送信され、すぐに終了します。
terdon's answer と Dan D.によるNohup
の説明を組み合わせることで、私が望んでいることを正確に実行する関数を作成しました。
これを.bashrc/.zshrc
ファイルに追加しました:
function open () {
Nohup xdg-open "$*" > /dev/null 2>&1
}
/dev/null 2>&1
の説明については stdout
およびstderr
の非表示に関するこの説明 を参照してください。
コマンドライン(ループ)からWebページを開く必要がある場合は、スクリプトを開始する前にブラウザーを開くだけです。
この場合、最初のリンクの後でブラウザが閉じられるのを待たずに、すべてを新しいタブで開きます。
今日のように、これらのオプションはどれも私にとってはうまくいきませんでした。 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つにすぎません。
これを試して:
DISPLAY=:0.0; xdg-open '<url>'
この手法を使用して、magnet:// URLをBit TorrentクライアントVuzeにエンキューします。
ssh someserver "DISPLAY=:0.0; xdg-open 'http://www.google.com/'"
単一引用符は、シェルがURLの解釈を試みないように、URLのコンテンツを保護するのに役立ちます。
disownは、このための正しいコマンドです。
読みやすくするために、2つの関数を使用します。
f_x()
{
xdg-open "$1" &
disown
}
x()
{
f_x "$*" > /dev/null 2>&1
}