7

ここsystemでRubyのメソッドのドキュメントを読んでいるとかなり混乱します。コマンドとは何か、オプションとは何かわかりません。以下を実行したい場合はどうすればよいですか?

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

セキュリティ上の理由から、シェルを使用しないバージョンの1つを使用したいと思います(最初のフォームではなく、指定したURLの2番目と3番目のフォーム)

4

1 に答える 1

14

例を考えてみましょう。

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

1つ目は、文字列'echo *'をシェルに渡して解析および実行します。そのため、シェルプロンプトからのsystem('echo *')出力と同じ出力が生成されます。現在のディレクトリにあるファイルのリストが表示されます。echo *対応する引数形式は次のとおりです。

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

2つ目は、シェルを完全にバイパスします。を検索しechoPATH文字列'*'を引数として実行します。シェルはワイルドカードを拡張するため(少なくとも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に別の名前で表示させる場合に使用します。ps2つの端子を開くと、これが実際に動作していることがわかります。それらの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

于 2012-11-12T04:18:19.283 に答える