Почему я получаю ошибки при запуске команд оболочки в консоли 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