Ubuntu 12.04
西纳特拉 1.3.3
为什么将参数传递给 ruby 系统调用(%x[] 或 ``)会在我的 sinatra 应用程序中给我一个“未找到”错误?相同的代码在从同一目录运行的普通 ruby 脚本中运行良好。
我有一个像这样的文件 test.rb
output = %x["ls"]
p output
当我使用“ruby test.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”示例不是我真正需要运行的命令,所以请不要解释获取此信息的不同方式。我有一个可执行文件,它将文件名作为我需要运行的参数,其行为方式完全相同。
提前致谢!