0

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」の例は、実際に実行する必要のあるコマンドではないため、この情報を取得する別の方法を説明しないでください。実行する必要のあるパラメーターとしてファイル名を受け取る実行可能ファイルがあります。これはまったく同じように動作します。

前もって感謝します!

4

2 に答える 2

0

同じディレクトリ内の別のファイルでsinatraアプリを書き直しました。

すべてが期待どおりに機能します。

理由がわからなかったので、元のファイルを削除して、それを理解しようとして時間を無駄にしないようにしました。

于 2012-11-04T05:52:37.377 に答える