Ubuntu 12.04
シナトラ1.3.3
ルビーシステムコール(%x[]または``)に引数を渡すと、sinatraアプリで「見つかりません」エラーが発生するのはなぜですか?同じディレクトリから実行されている通常のrubyスクリプトでも、同じコードが正常に機能します。
私はこのようなファイルtest.rbを持っています
output = %x["ls"]
p output
「rubytest.rb」で実行すると、期待どおり、コンソールに現在のディレクトリの内容が表示されます。
次のようにシステムコールに引数を与えるようにプログラムを変更すると、次のようになります。
output = %x["ls sub_dir/"]
p output
期待どおり、現在のディレクトリにあるsub_dirの内容を取得します。
ここまでは順調ですね。
ここで、postメソッドを使用してSintraアプリを作成すると、次のようになります。
require 'rubygems'
require 'bundler/setup'
require 'sinatra'
post "/" do
output = x["ls"]
return output
end
「/」へのPost呼び出しへの応答は、期待どおりに「sub_dir」を含む現在のディレクトリの内容を返します。
次のように、sinatraアプリへのシステムコールに引数を追加しようとすると、次のようになります。
require 'rubygems'
require 'bundler/setup'
require 'sinatra'
post "/" do
output = x["ls sub_dir/"]
return output
end
応答はnilであり、コンソールにエラーがあります。
sh:1:ls sub_dir /:見つかりません
sinatraアプリのシステムコールにパラメーターを追加すると、同じ場所から実行されたプレーンなrubyスクリプトから呼び出された同じコードが完全に機能する場合に、パラメーターがクラッシュするのはなぜですか。
ちなみに、ここに示されている「ls」の例は、実際に実行する必要のあるコマンドではないため、この情報を取得する別の方法を説明しないでください。実行する必要のあるパラメーターとしてファイル名を受け取る実行可能ファイルがあります。これはまったく同じように動作します。
前もって感謝します!