ここsystem
でRubyのメソッドのドキュメントを読んでいるとかなり混乱します。コマンドとは何か、オプションとは何かわかりません。以下を実行したい場合はどうすればよいですか?
wget -pk -nd -P /public/google www.google.com
セキュリティ上の理由から、シェルを使用しないバージョンの1つを使用したいと思います(最初のフォームではなく、指定したURLの2番目と3番目のフォーム)
例を考えてみましょう。
system("echo *")
system("echo", "*")
1つ目は、文字列'echo *'
をシェルに渡して解析および実行します。そのため、シェルプロンプトからのsystem('echo *')
出力と同じ出力が生成されます。現在のディレクトリにあるファイルのリストが表示されます。echo *
対応する引数形式は次のとおりです。
commandline : command line string which is passed to the standard shell
2つ目は、シェルを完全にバイパスします。を検索しecho
、PATH
文字列'*'
を引数として実行します。シェルはワイルドカードを拡張するため(少なくともunixyシステムでは)、は*
単純なままで、出力として*
表示*
されます。ここでの対応する引数形式は次のとおりです。
cmdname, arg1, ... : command name and one or more arguments (no shell)
3番目の形式:
[cmdname, argv0], arg1, ... : command name, argv[0] and zero or more arguments (no shell)
実行したいが、リストなどcmdname
に別の名前で表示させる場合に使用します。ps
2つの端子を開くと、これが実際に動作していることがわかります。それらの1つを開いてirb
、次のように言います。
system('sleep', '10')
次に、すぐにもう一方に切り替えて、ps
リストを確認します。そこに見えるはずsleep 10
です。しかし、これをに与えるとirb
:
system(['sleep', 'pancakes'], '10')
リストを確認すると、が表示さps
れますpancakes 10
。同様の2端子トリックはshell -c sleep 10
、あなたが言うならあなたにaを示しますsystem('sleep 10')
。
最初の引数としてハッシュを指定すると、そのハッシュが生成されたプロセスの環境変数として使用されます。最後の引数としてハッシュを指定すると、そのハッシュがオプションとして使用されます。引数に関する詳細なドキュメントは、system
ドキュメントに記載されているように、の下にありますKernel#spawn
。