オープン
コマンドラインからWebブラウザを開きする最も簡単な方法は、open commandを使用することです。 URLのように見える文字列(httpで始まり、TLDを持つなど)が与えられた場合、openコマンドは現在のデフォルトのWebブラウザを起動するほどスマートです。幸いにも
バッククォートと%X
、(すべてのオブジェクトが継承)Rubyのカーネルモジュールはすぐに、サブシェルを起動し、いくつかの作業を実行して、あなたのRubyスクリプトに実行を戻すためmethodが含まれています。
我々はバッククォートでこれを達成することができ、次のいずれか`open https://google.com`
かと
% X構文、私たちは私たち自身の区切り文字を定義することができますされ(個人的に、私はこのスタイルを好む):
%x(open https://google.com)
上記のコードは、デフォルトのブラウザに新しいブラウザタブを開き、Googleにポイントする必要があります。参考にして、複数のブラウザウィンドウが開いている場合、新しいタブが開いているウィンドウが任意であるように見えるので、ブラウザのポップアップが表示されない場合は、最小化されたウィンドウを確認してください。
サブシェル内のシェルコマンドがstdoutに書き込むと、代わりに出力が文字列としてスクリプトに返されることに言及することは重要です。
files_in_home_directory = %x(cd && ls -a)
ます。また、文字列の補間を使用することができます。私たちはこのようなものを行うことができますので、これは素晴らしいです!
song = "https://open.spotify.com/track/5ghIJDpPoe3CfHMGu71E6T"
%x(open #{song})
プロセス。スポーン
上記の方法はブロックされています。これは、Rubyスクリプトが停止してスクリプトに制御を戻す前に、サブシェルが処理を完了するのを待つことを意味します。これは、ブラウザでリンクを開くなどの小さなことを行うのはまったく問題ありませんが、そのサブシェルで何か遅くする必要がある場合は、悪い時間がかかるでしょう。 Process.spawn
は、別のプロセスでサブシェルを開き、それを忘れることができます。その作業は行われますか、それはしていませんが、私たちのRubyスクリプトは、その事業に取り掛かることができ、次のいずれか
%x(sleep 10 && open https://google.com)
はサブシェルだけでなく、スクリプト
Process.spawn("sleep 10 && open https://google.com")
だけでなく、あなたのスクリプトがサブシェルながら継続することができます一時停止します別のプロセスでその仕事をしています。
Backticks /%xメソッドとは異なり、Process.spawnはstdoutを文字列として返さず、代わりにプロセスIDを返します。 pidを使用してそのプロセスの結果を確認するには、many waysがあります。
警告:ユーザーが入力した値を含む文字列は決して実行しないでください。これは単に問題を求めているだけです。