打開
打開命令行Web瀏覽器的最簡單方法是使用open command。如果給定的字符串看起來像一個URL(以http開頭,具有TLD等),那麼open命令足夠聰明,可以啓動當前的默認Web瀏覽器。
反引號和%×
幸運的是,Ruby的內核模塊(其中的所有對象繼承)包括method快速啓動子shell,執行一些工作,然後返回執行你的Ruby腳本。
我們可以用反引號完成:
`open https://google.com`
或者與%X語法,這可以讓我們定義我們自己的分隔符(就個人而言,我更喜歡這種風格):
%x(open https://google.com)
上面的代碼應該在默認瀏覽器中打開一個新的瀏覽器標籤,並將其指向谷歌。作爲一個便箋,我注意到,如果您打開了多個瀏覽器窗口,那麼您可以隨意打開新選項卡的哪個窗口,因此如果您沒有看到瀏覽器彈出窗口,請檢查最小化的窗口。
值得一提的是,當子shell中的shell命令寫入stdout時,輸出將作爲字符串返回到腳本。這是偉大的,因爲我們可以做這樣的東西:
files_in_home_directory = %x(cd && ls -a)
您還可以使用字符串插值!
song = "https://open.spotify.com/track/5ghIJDpPoe3CfHMGu71E6T"
%x(open #{song})
過程。spawn
上面的方法是阻塞的,這意味着您的ruby腳本停下來等待子shell完成其工作,然後再將控制權返回給您的腳本。對於在瀏覽器中打開鏈接等小事情來說,這是完全正確的,但是如果您需要在該子框架中更慢地執行某些操作,那麼您將會遇到不好的時間。 Process.spawn
讓我們在另一個進程中打開子shell,然後忘掉它。無論是其完成工作或沒有,但我們的Ruby腳本可以去它的業務:
%x(sleep 10 && open https://google.com)
將暫停不僅是子shell,而且你的腳本
Process.spawn("sleep 10 && open https://google.com")
將讓你的腳本繼續,而子shell在另一個過程中完成其工作。
與反引號/%x方法不同,Process.spawn不會將stdout作爲字符串返回,而是返回進程ID。有many ways來驗證該過程使用pid的結果。
警告:你永遠不應該執行一個包含用戶輸入值的字符串,這只是要求麻煩。