2012-11-12 11 views
5

Rubyのsystemメソッドhereのドキュメントを読むのはかなり混乱しています。私はコマンドとオプションは何であるか分かりません。次のことを実行したい場合、私は何をしますか?セキュリティ上の理由Rubyシステムのメソッド引数

wget -pk -nd -P /public/google www.google.com 

、Iは、例を考慮しないシェルを使用しないバージョン(Iが与えURL第二及び第三の形態ではなく、最初の)

+1

バックチックを使用できます。 – alex

+0

'ファイル=システム(wget -pk -nd -P/public/google www.google.com)'これを確認してくださいhttp://stackoverflow.com/questions/690151/getting-output-of-system-calls-in-ruby – nicooga

+0

申し訳ありませんが、私が何を意味したかを編集しました。 –

答えて

10

のいずれかを使用したいです:

system("echo *") 
system("echo", "*") 

最初の文字列は、解析するシェルに文字列'echo *'を渡します。そのため、system('echo *')は、シェルプロンプトからecho *という出力と同じ出力を生成します。現在のディレクトリにあるファイルのリストを取得します。対応する引数形式は次のとおりです。

commandline : command line string which is passed to the standard shell 

2番目の引数は、シェルを完全にバイパスします。 PATHにはechoがあり、それを引数として文字列'*'で実行します。シェルはワイルドカードを展開するので(少なくとも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) 

が使用されています。これは実際には2つの端末を開くことで見ることができます。そのうちの一つでirbを開き、言う:

system('sleep', '10') 

をその後すぐに他のに切り替えて、psリストを見てください。そこにはsleep 10が表示されます。あなたがpancakes 10を参照してくださいよ、

system(['sleep', 'pancakes'], '10') 

をしてpsリストをチェックします。しかし、あなたはirbにこれを与えれば。 system('sleep 10')と言っても、同様の2端子トリックではshell -c sleep 10が表示されます。

最初の引数としてHashを指定すると、そのHashが生成されたプロセスの環境変数として使用されます。最後の引数としてハッシュを指定すると、そのハッシュがオプションとして使用されます。議論に関する詳細な文書は、systemの文書に記載されているように、Kernel#spawnで入手できます。

+0

あなたの長い答えをありがとう!私がまだ完全には分かっていないのは、「議論」とは何か?'-pk'、' -nd'、 '-P'、'/public/google'、 'www.google.com'は1つの引数としてカウントされますか? –

+0

@MikaH:はい、それぞれ引数です。 –

関連する問題