Cygwin - запустить скрипт без вывода сообщений из «команды запуска» - PullRequest
34 голосов
/ 23 марта 2009

У меня есть скрипт, скажем:

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 в исполняемый файл с использованием bat_2_exe_converter (не делает cmd беззвучным)

мысли

РЕДАКТИРОВАТЬ: Решение до сих пор предлагает что-то набрать из реальной оболочки Cygwin. Я пытаюсь получить более быстрое решение, имея что-то короткое, что я могу набрать в команде запуска Windows. Кроме того, nohup command; exit не убивает автоматически поле - однако я могу убить его вручную, не прерывая процесс IDE. Команда run принимает ярлыки (.lnk), bat, exe's.

Ответы [ 7 ]

38 голосов
/ 18 ноября 2010

Попробуйте команду run.exe cygwin . Это большая установка, полная среда Unix для вашего компьютера с Windows. Предположим, вы установили его на c:\cygwin\.

Откройте оболочку (bash) и введите man run.

Никаких загадок, просто запустите c:\cygwin\bin\run.exe <your command here>, и вы получите выполнение окна без душ.

Вы можете запустить его из любого окна DOS (запустите cmd.exe из меню Пуск). Вам не нужно запускать его из Cygwin.

Чтобы упростить задачу, добавьте C:\cygwin\bin к вашей переменной% PATH% env var («Мой компьютер» → «Свойства» → «Дополнительно» → «Переменные среды») (слава Фелипе Альваресу).

Теперь вы можете просто набрать

run "C:\foo.bsh"

Вот справочная страница команды 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)
16 голосов
/ 20 июня 2013

Вы можете использовать либо ...

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 двоичный файл, скомпилированный из исходного кода.)

10 голосов
/ 16 апреля 2011

Меня это некоторое время беспокоило, я не мог найти решение для этого, но я, наконец, собрал правильное сочетание.

Вы можете просто сделать следующее, если у вас есть cygwin в вашей PATH:
run bash test.js

Если Cygwin не на вашем пути, вы можете сделать это:
c:\cygwin\bin\run.exe -p /bin bash test.js

Если вы ищете больше контроля над созданным окном (развернуть и т. Д.), Похоже, вы также можете использовать cygstart.

Источники:
- ответил выше Невес (хотя для меня лично этого было недостаточно, чтобы понять это)
- http://cygwin.com/ml/cygwin/2008-09/msg00156.html

4 голосов
/ 23 марта 2009

Поскольку терминал не может закрыться, пока ваш скрипт еще работает, попробуйте команду:

"nohup C:\foo.bsh; exit" 

Таким образом, ваш сценарий будет заземлен и отделен от терминала, и он должен быстро выйти, чтобы терминал ушел. Я думаю, что при таком подходе окно все еще может «мигать», но результаты должны быть лучше, чем то, что вы получаете.

3 голосов
/ 02 сентября 2014

Я использую 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
2 голосов
/ 23 марта 2009

Еще одна несовершенная возможность - запустить скрипт через ярлык и установить для параметра «Запуск» ярлыка значение «свернутый».

0 голосов
/ 31 августа 2016

Перейдите в каталог, где вы установили Cygwin (на моей машине это c: / cygwin64 / bin) Когда-то просто введите "bash.exe"

...