2009-02-27 7 views
4

Я пытаюсь запустить Cygwin версию ruby.exe из приложения .NET, но я застрял.Выполнение процесса Cygwin из .NET?

c:\>"c:\cygwin\bin\ruby.exe" c:\test\ruby.rb 
/usr/bin/ruby: no such file to load -- ubygems (LoadError) 

Как вы видите, Ruby не может найти библиотеки, потому что он ищет некоторые пути в стиле Linux.

Очевидно, когда я запускаю ruby.exe из .NET, так как он не может найти библиотеки, он терпит неудачу, как указано выше.

Если я не загружать любую библиотеку она отлично работает:

c:\>"c:\cygwin\bin\ruby.exe" -v 
ruby 1.8.7 (2008-08-11 patchlevel 72) [i386-cygwin] 

Первоначально Cygwin начинается с этой cygwin.bat

chdir C:\cygwin\bin 
bash --login -i 

Как я могу сделать .NET для первого перейти в Cygwin среде а затем выполнить рубин в этой среде?

  • Я не могу использовать Windows Ruby, мне нужно cygwin ruby.
  • Я знаю о потенциальном использовании интерактивного вождения «bash», но это звучит грязно, если только не есть хороший способ сделать это.

ответ

4

Возможно, вы используете, возможно, родные рубины Windows и Cygwin ruby? Использование Cygwin rubygems, похоже, отлично работает для меня. (Почему ваш интерпретатор Ruby Ruby, по-видимому, ищет путь с обратными косами Windows?).

В качестве альтернативы, вы пробовали run.exe?

C:\cygwin\bin\run.exe -p /starting/dir exe_to_run 

Вот запись людей-страница:

ИМЯ

запуска - запуск программ с окном скрытых консолей

СИНТАКСИСОМ

команды

запустить [-p пути] [ -wait] аргументы

RunCommand [-p путь] [-wait] аргументы

ОПИСАНИЕ

программы для Windows являются либо программы с графическим интерфейсом или консольные программы. Когда запущены, консольные программы будут либо прикрепляться к существующей консоли , либо создать новый. Программы GUI никогда не могут подключаться к единственной подошве. Невозможно подключиться к существующей консоли, но скрыть ее, если запущен в качестве программы GUI.

run сделает это за вас. Он работает как промежуточный и запускает про- грамм, но скрывает консольное окно.

С помощью пути -p вы можете добавить путь к переменной среды PATH.

Выдача -wait как первый аргумент программы заставит запустить wait для завершения программы , в противном случае она немедленно возвращается.

Второй вариант предназначен для создания оберток. Если исполняемый файл равен с именем runcommand (например, runemacs), запуск начнется с запуска программы (например, emacs).

Примеры

запустить -p/USR/X11R6/bin Xterm

пробег Emacs -wait runemacs -wait

перспективе сделать -wait

3

Почему вы не выполняете неинтерактивную оболочку bash, которая запускает ruby ​​из вашего приложения .NET? Что-то вроде:

bash --login -c <your-path-to-ruby> <your-library-to-load> 

Не уверен, структуру файла, но, например,

bash --login -c /usr/bin/ruby ~/test/ruby.rb 

Посмотрите на -c option from the bash man page для получения дополнительной информации.

+0

пытался это одному точно такая же проблема , давая эту ошибку: rb /usr/bin/ruby: нет такого файла для загрузки - ubygems (LoadError) –

+0

И если вы введете ту же самую команду (материал после -c) из интерактивной оболочки bash, которую вы получите. .? –

+0

действительно довольно странно, если я не запускаю cygwin из оболочки cygwin, это не сработает, даже если я сделаю «bash -login -i» –

Смежные вопросы