40

我有脚本可以说:

C:\foo.bsh

我希望能够通过 windows 运行命令运行此命令:

Start -> Run
Windows Key + R

并输入一些像'foo'这样的小东西并按回车键。

但是,我不希望 cmd 提示可见。该脚本对 IDE 进行了一些预处理。我不希望 cmd 提示符在 IDE 进程的生命周期内打开。

我努力了:

1)创建一个bat文件,内容如下:

c:\cygwin\bin\bash --login "C:\foo.bsh" (this fails because it keeps a cmd open)

2) 使用 bat_2_exe_converter 将上述 bat 文件转换为 exe(不会使 cmd 静默)

想法?

编辑:到目前为止的解决方案建议从实际的 cygwin shell 中键入一些内容。我试图通过在 Windows 运行命令中键入一些简短的内容来获得更快的解决方案。此外,nohup command; exit它不会自动杀死该框 - 但是我可以手动杀死它而不杀死 IDE 进程。运行命令接受快捷方式 (.lnk's)、bat's、exe's。

4

7 回答 7

43

试试cygwin的 run.exe 命令。这是一个大安装,一个完整的 Windows 机器的 unix 环境。假设您将它安装在c:\cygwin\.

没有什么神秘的,只要运行c:\cygwin\bin\run.exe <your command here>,你就会有你的 no dos 窗口执行。

您可以从任何 DOS 窗口运行它(从开始菜单运行 cmd.exe)。您不需要从 cygwin 运行它。

为了使它更容易,请附加C:\cygwin\bin到您的 %PATH% 环境变量(我的电脑 → 属性 → 高级 → 环境变量)(感谢 Felipe Alvarez 评论)。

现在你可以输入

c:\cygwin\bin\run.exe "C:\foo.bsh"

您必须使用此命令在开始菜单中创建一个链接,以便能够使用 Win-R 运行它。

这是 run 命令的手册页:

$ man run
RUN(1)                             run 1.3.0                            RUN(1)

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

AUTHORS
       Charles S. Wilson

       Harold L Hunt II

       Jehan Bing

       Alexander Gottwald

Version 1.3.0                    November 2005                          RUN(1)
于 2010-11-18T19:15:50.707 回答
20

您可以使用任一...

c:\cygwin\bin\bash -l /path/to/script_to_interpret.sh

...或者...

c:\cygwin\bin\bash -l -c /path/to/executable_script.sh

注意:-l标志告诉 bash “表现得好像它已被登录直接调用”并使用Bash Startup Files。这很重要,因为它会设置您的 $PATH 以及您在启动 cygwin 终端时所依赖的其他内容。如果您不包含-l,或者--login当您尝试调用除内置 bash 之外的任何内容时,您将得到“找不到命令”。

两者之间的区别就像做...

bash script_to_interpret.sh

...和...

./executable_script.sh

...在 *nix 中。前者使用 bash 解释脚本。后者执行脚本(仅当它具有 时chmod +x executable_script.sh)并根据其“shebang”行对其进行解释。如果您的可执行文件根本不是脚本,则后一种方法也是您想要做的,例如从源代码编译的 *nix 二进制文件。)

于 2013-06-20T03:06:35.177 回答
10

它一直困扰着我一段时间,我找不到解决方案,但我终于得到了正确的组合。

如果您的 PATH 上有 cygwin,您可以简单地执行以下操作:
run bash test.js

如果 cygwin 不在您的路径上,您可以这样做:
c:\cygwin\bin\run.exe -p /bin bash test.js

如果您正在寻找对创建的窗口的更多控制(最大化等),它看起来也可以使用cygstart

资料来源:
- neves 上面的回答(尽管我个人认为这还不够)
- http://cygwin.com/ml/cygwin/2008-09/msg00156.html

于 2011-04-15T23:09:08.253 回答
4

由于脚本仍在运行时终端无法关闭,请尝试以下命令:

"nohup C:\foo.bsh; exit" 

这样,您的脚本将在后台运行并与终端分离,并且它应该快速退出,以便终端消失。我认为使用这种方法,窗口可能仍然“闪烁”,但结果应该比你得到的要好。

于 2009-03-23T13:20:46.190 回答
3

我正在运行 Cygwin64,xwin 服务器链接指向:

C:\cygwin64\bin\run.exe /usr/bin/bash.exe -l -c /usr/bin/startxwin.exe

这会在任务栏上创建一个图标和一个通知。我不喜欢那样。该图标相当无用,通知包含 .XWinrc 中的所有菜单选项。

所以...我编写了一个 .vbs 脚本以静默运行此命令并使图标消失:

Set objShell = CreateObject("WScript.Shell")
objShell.Run("C:\cygwin64\bin\run.exe /usr/bin/bash.exe -l -c /usr/bin/startxwin.exe"), 0
于 2014-09-02T10:10:17.427 回答
2

另一种不完美的可能性是通过快捷方式运行脚本并将快捷方式的运行选项设置为“最小化”。

于 2009-03-23T13:27:18.810 回答
0

转到您安装 cygwin 的目录(在我的机器上它是 c:/cygwin64/bin) 在那里只需键入“bash.exe”

于 2016-08-31T14:05:41.660 回答