Почему я получаю ошибки при запуске команд оболочки в консоли rails (irb)

Когда я бегу простой ls Команда из консоли Rails, я получаю эту ошибку:

$ rails c
irb(main):001:0> `ls`
script/rails: No such file or directory - ls
=> nil

У меня такая же ошибка при использовании других команд, таких как cd ~, Может кто-нибудь сказать мне, почему содержимое текущей папки не отображается?

ОБНОВЛЕНИЕ: после попытки exec('ls')Это вывод, который заставляет меня думать, что это должны быть локальные настройки.

irb(main):001:0> exec('ls')
Errno::ENOENT: No such file or directory - ls
    from (irb):1:in `exec'
    from (irb):1
    from     /[filepath]/runtime/ruby1.9/gems/1.9.1/gems/railties-3.2.18/lib/rails/commands/console.rb:47:in `start'
from /[filepath]/runtime/ruby1.9/gems/1.9.1/gems/railties-3.2.18/lib/rails/commands/console.rb:8:in `start'
from /[filepath]/runtime/ruby1.9/gems/1.9.1/gems/railties-3.2.18/lib/rails/commands.rb:41:in `<top (required)>'
from /[filepath]/runtime/ruby1.9/1.9.1/rubygems/custom_require.rb:36:in `require'
from /[filepath]/runtime/ruby1.9/1.9.1/rubygems/custom_require.rb:36:in `require'
from script/rails:6:in `<main>'

1 ответ

Это потому, что вы сейчас находитесь на интерактивной рубиновой сессии (обратите внимание на irb в вашем приглашении) в контексте (чтобы вы могли использовать класс, модели активных записей и т. д.) вашего приложения ruby ​​on rails. Команды, которые вы вводите, должны быть командами ruby. Команды raw shell не работают здесь как есть.

Однако вы можете использовать exec:

$ rails c
Connecting to database specified by database.yml
Loading development environment (Rails 3.2.17)
2.0.0p247 :001 > exec('ls')
app     config.ru  doc      Gemfile.lock  log       README.rdoc  spec
config  db         Gemfile  lib           Rakefile  script       tmp
16:12:10 durrantm Castle2012 /home/durrantm/Dropnot/_/rails_apps/linker master
$ 

Вы также можете использовать backicks (`) для запуска команд, т.е.

2.0.0p247 :007 > `ls`
=> "app\nconfig\nconfig.ru\ndb\ndoc\nGemfile\nGemfile.lock\nlib\nlog\nRakefile\nREADME.rdoc\nscript\nspec\ntmp\n" 

Также %x:

2.0.0p247 :020 > %x('ls')
 => "app\nconfig\nconfig.ru\ndb\ndoc\nGemfile\nGemfile.lock\nlib\nlog\nRakefile\nREADME.rdoc\nscript\nspec\ntmp\n" 

а также system:

2.0.0p247 :021 > system("ls")
app     config.ru  doc      Gemfile.lock  log       README.rdoc  spec
config  db         Gemfile  lib           Rakefile  script       tmp
 => true 
Другие вопросы по тегам