閱讀Ruby的文檔system
方法here我很困惑。我不確定什麼是命令,什麼是選項。如果我想執行以下操作,我該怎麼辦?Ruby系統方法參數
wget -pk -nd -P /public/google www.google.com
出於安全原因,我想用採用無殼(在我給URL中的第二和第三個形式,而不是第一)
閱讀Ruby的文檔system
方法here我很困惑。我不確定什麼是命令,什麼是選項。如果我想執行以下操作,我該怎麼辦?Ruby系統方法參數
wget -pk -nd -P /public/google www.google.com
出於安全原因,我想用採用無殼(在我給URL中的第二和第三個形式,而不是第一)
考慮例子的版本之一:
system("echo *")
system("echo", "*")
第一個將字符串'echo *'
傳遞給shell進行解析和執行;這就是爲什麼system('echo *')
在shell提示符下產生與echo *
相同的輸出:您將獲得當前目錄中的文件列表。相應的參數形式是:
commandline : command line string which is passed to the standard shell
第二個完全繞過外殼。它將在PATH
中查找echo
,然後以字符串'*'
作爲參數執行它。由於shell擴展通配符(至少在unixy系統上),*
將保持爲簡單的*
,您將看到*
作爲輸出。這裏的相應參數的形式是:
cmdname, arg1, ... : command name and one or more arguments (no shell)
第三種形式:當您要執行cmdname
,但有它不同的名字顯示在列表ps
和這樣
[cmdname, argv0], arg1, ... : command name, argv[0] and zero or more arguments (no shell)
使用。你可以通過打開兩個終端來看到這一點。打開在其中的一個irb
說:
system('sleep', '10')
然後迅速切換到另一個,並期待在ps
上市。你應該在那裏看到sleep 10
。但是,如果你把這個給irb
:
system(['sleep', 'pancakes'], '10')
,並檢查ps
上市,你會看到pancakes 10
。如果你說system('sleep 10')
,類似的雙終端技巧會告訴你一個shell -c sleep 10
。
如果您提供一個哈希作爲第一個參數,那麼該哈希將用作生成進程的環境變量。如果你提供了一個Hash作爲最終的參數,那麼這個Hash被用作選項;如system
文檔中所述,有關論點的進一步文檔可在Kernel#spawn
下獲得。
感謝您長時間的回答!我還不完全確定的是,什麼是「爭論」?「-pk」,「-nd」,「-P」,「/ public/google」,「www.google.com」是否都被視爲一個參數? –
@MikaH:是的,這些都是爭論。 –
你可以使用反引號。 – alex
'file = system(wget -pk -nd -P/public/google www.google.com)'。檢查這個http://stackoverflow.com/questions/690151/getting-output-of-system-calls-in-ruby – nicooga
對不起,編輯澄清我的意思。 –