Rubyのsystem
メソッドhereのドキュメントを読むのはかなり混乱しています。私はコマンドとオプションは何であるか分かりません。次のことを実行したい場合、私は何をしますか?セキュリティ上の理由Rubyシステムのメソッド引数
wget -pk -nd -P /public/google www.google.com
、Iは、例を考慮しないシェルを使用しないバージョン(Iが与えURL第二及び第三の形態ではなく、最初の)
Rubyのsystem
メソッドhereのドキュメントを読むのはかなり混乱しています。私はコマンドとオプションは何であるか分かりません。次のことを実行したい場合、私は何をしますか?セキュリティ上の理由Rubyシステムのメソッド引数
wget -pk -nd -P /public/google www.google.com
、Iは、例を考慮しないシェルを使用しないバージョン(Iが与えURL第二及び第三の形態ではなく、最初の)
のいずれかを使用したいです:
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
で入手できます。
あなたの長い答えをありがとう!私がまだ完全には分かっていないのは、「議論」とは何か?'-pk'、' -nd'、 '-P'、'/public/google'、 'www.google.com'は1つの引数としてカウントされますか? –
@MikaH:はい、それぞれ引数です。 –
バックチックを使用できます。 – alex
'ファイル=システム(wget -pk -nd -P/public/google www.google.com)'これを確認してくださいhttp://stackoverflow.com/questions/690151/getting-output-of-system-calls-in-ruby – nicooga
申し訳ありませんが、私が何を意味したかを編集しました。 –