Problem z poleceniem exec

Witam wszystkich,
To mój pierwszy post na forum. Od jakiegoś miesiąca wziąłem się za naukę Rubiego , RoR. CZytam książkę Petera Coopera : “Programowanie w Ruby od podstaw”. Natknąłem dzisiaj na pewien problem, którego w żaden sposób nie umiem “pokonać” :frowning: Przeglądałem różne fora , nie znalazłem jednak żadnych ciekawych rozwiązań. Chodzi o proste wydawałoby się polecenie exec :

gdy wpisuje polecenie, tak jak w książce :

exec (“pierdoly.rb”)

dostaje błąd :
Exec format error - pierdoly.rb (Errno::ENOEXEC)

Plik znajduje się w katalogu domyślnym , jest w nim zwykłe “hallo world” , nie ma mowy o literówce.

Stwierdziłem więc, że może być jakiś problem z plikami rb , więc spróbuje na pliku exe. Wpisałem :

exec(“C:/Program Files/QuickTime/QuickTimePlayer.exe”)

Dostałem błąd :
No such file or directory - C:/Program Files/QuickTime/QuickTimePlayer.exe (Errno::ENOENT)

Co dziwne kiedy wpiszę polecenie :
puts File.exist?(“C:/Program Files/QuickTime/QuickTimePlayer.exe”)

dostaje odpowiedź TRUE, więc to też nie może być literówka.

Nie wiem w czym tkwi problem. Mój system operacyjny to Win XP SP3.

Pozdrawiam

Pierwszy błąd jest spowodowany tym, że plik nie jest wykonywalny, w windowsie pewnie będziesz musiał zrobić cos takiego

exec "ruby pierdoly.rb"

Drugi bład (No such file or directory) to już kwestia tego, że w ścieżce są spacje. Przy exists? nie ma takiego problemu, gdyż interpreter sprawdza całą ścieżkę. Przy exec to co podajesz jako argument wykona się w systemie, czyli to tak jakbyś wykonał:

C:/Program Files/QuickTime/QuickTimePlayer.exe

a powinno być:

"C:/Program Files/QuickTime/QuickTimePlayer.exe"

Dlatego w takim wypadku musiałbyś zrobić na przykład:

exec "\"C:/Program Files/QuickTime/QuickTimePlayer.exe\""

Dzięki za szybką odpowiedź.
Jeżeli chodzi o plik exe , zrobiłem jak napisałeś i faktycznie zadziałało.
Niestety zmiana kodu na :
exec “ruby pierdoly.rb”

zmieniła komunikat błędu na: No such file or directory

Nie wiem co jeszcze mogę robić źle.

A masz oczywiście rubiego w ścieżce?

Możesz spróbować to sprawdzić w ten sposób:

exec "ruby -e 'puts 1'"

Jeżeli to też wyrzuci No such file or directory, tzn. że podczas wykonywania tego skryptu nie masz w pathie rubiego.

Możesz też zobaczć co masz w path:

p ENV['PATH']

Problem rozwiązany.
Przydało sie podpowiedziane polecenie:
p ENV[‘PATH’]
Zobaczyłem , że jest tam ścieżka do dwóch różnych wersji Ruby. Odinstalowując tą starszą wszystko już działa jak należy.
Dzięki i pozdrawiam