从 .NET 执行 Cygwin 进程?

发布于 2024-07-14 10:59:33 字数 695 浏览 3 评论 0原文

我正在尝试从 .NET 应用程序启动 Cygwin 版本的 ruby​​.exe,但我陷入困境。

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

正如您所看到的,Ruby 无法找到库,因为它正在寻找一些 Linux 风格的路径。

显然,当我从 .NET 运行 ruby​​.exe 时,因为它找不到库,所以会像上面一样失败。

如果我不加载任何库,它工作正常:

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 环境,然后在该环境中执行 ruby​​?

  • 我无法使用 Windows Ruby,我需要 cygwin ruby​​。
  • 我知道交互驱动“bash”的潜在用途,但这听起来很脏,除非有很好的方法。

I'm trying to launch Cygwin version of ruby.exe from a .NET application, but I'm stuck.

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

As you see Ruby can't locate libraries because it's looking some Linux style paths.

Obviously when I run ruby.exe from .NET since it can't find libraries it fails like above.

If I don't load any library it works fine :

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

Originally cygwin starts with this cygwin.bat

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

How can I make .NET to first go into cygwin enviroment and then execute ruby in that enviroment ?

  • I can't use Windows Ruby, I need to cygwin ruby.
  • I'm aware of potential usage of interactively driving "bash" but that sounds dirty, unless there is nice way of doing it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

又爬满兰若 2024-07-21 10:59:33

您是否正在混合使用本机 Windows ruby​​gems 和 Cygwin ruby​​? 使用 Cygwin ruby​​gems 似乎对我来说效果很好。 (为什么你的 Cygwin ruby​​ 解释器显然在搜索包含 Windows 反斜杠的路径?)。

或者,您是否尝试过run.exe

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

这是手册页条目:

姓名

运行 - 使用隐藏的控制台窗口启动程序

概要

运行[-p路径]命令[-wait]参数

运行命令 [ -p 路径 ] [ -wait ] 参数

描述

Windows 程序可以是 GUI 程序,也可以是控制台程序。 什么时候
启动的控制台程序将附加到现有控制台
或创建一个新的。 GUI程序永远不能附加到现有的con-
唯一。 无法附加到现有控制台,但如果出现以下情况则将其隐藏
作为 GUI 程序启动。

run 会为你做这件事。 它作为中间体并启动一个亲
gram 但隐藏控制台窗口。

使用 -p path 您可以将路径添加到 PATH 环境变量。

发出 -wait 作为第一个程序参数将使运行等待程序
完成,否则立即返回。

第二个变体用于创建包装器。 如果可执行文件是
命名为runco​​mmand(例如runemacs),run将尝试启动程序(例如
emacs)。

示例

运行 -p /usr/X11R6/bin xterm

运行 emacs -wait
runemacs-等待

运行 make -wait

Are you using perhaps mixing native Windows rubygems and Cygwin ruby? Using Cygwin rubygems seems to work fine for me. (Why is your Cygwin ruby interpreter apparently searching a path with Windows backslashes in it?).

Alternatively, have you tried run.exe?

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

Here's the man-page entry:

NAME

run - start programs with hidden console window

SYNOPSIS

run [ -p path ] command [ -wait ] arguments

runcommand [ -p path ] [ -wait ] arguments

DESCRIPTION

Windows programs are either GUI programs or console programs. When
started console programs will either attach to an existing console
or create a new one. GUI programs can never attach to an exiting con-
sole. There is no way to attach to an existing console but hide it if
started as GUI program.

run will do this for you. It works as intermediate and starts a pro-
gram but makes the console window hidden.

With -p path you can add path to the PATH environment variable.

Issuing -wait as first program argument will make run wait for program
completition, otherwise it returns immediately.

The second variant is for creating wrappers. If the executable is
named runcommand (eg runemacs), run will try to start the program (eg
emacs).

EXAMPLES

run -p /usr/X11R6/bin xterm

run emacs -wait
runemacs -wait

run make -wait

美羊羊 2024-07-21 10:59:33

为什么不执行一个从 .NET 应用程序运行 ruby​​ 的非交互式 bash shell? 例如:

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

不确定您的文件结构,但例如,

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

查看 bash 中的 -c 选项手册页以获取更多信息。

Why don't you execute a non-interactive bash shell which runs ruby from your .NET application? Something like:

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

Not sure your file structure, but for example,

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

Look at the -c option from the bash man page for more info.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文