web-dev-qa-db-ja.com

Cygwin-「実行コマンド」からサイレントモードでスクリプトを実行

私はスクリプトを言うことができます:

C:\foo.bsh

私はwindows runコマンドを介してこのコマンドを実行できるようにしたい:

Start -> Run
Windows Key + R

「foo」のような小さな何かを入力してリターンキーを押します。

ただし、cmdプロンプトを表示したくありません。このスクリプトは、IDEの前処理を行います。 IDEプロセスの存続期間中、cmdプロンプトを開いたままにしたくありません。

私が試してみました:

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のrunコマンドで入力できる短いものを用意することで、より高速なソリューションを得ようとしています。また、Nohup command; exitはボックスを自動的に強制終了しませんが、IDEプロセスを強制終了せずに手動で強制終了できます。runコマンドはショートカット(.lnk's)、bat's、exe'sを受け入れます。

35
Russ

cygwin のrun.exeコマンドを試してください。これは大きなインストールであり、Windowsマシンの完全なUNIX環境です。 c:\cygwin\にインストールしたとします。

シェル(bash)を開き、man runと入力します。

謎はありません。c:\cygwin\bin\run.exe <your command here>を実行するだけで、DOSウィンドウを実行できなくなります。

任意のDOSウィンドウから実行できます(スタートメニューからcmd.exeを実行します)。 cygwinから実行する必要はありません。

簡単にするには、%PATH%env varにC:\cygwin\binを追加します(マイコンピューター→プロパティ→詳細設定→環境変数)(フェリペアルバレスへのコメントコメント)。

今、あなたはちょうど入力することができます

run "C:\foo.bsh"

Runco​​mmandのmanページは次のとおりです。

$ 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)
38
neves

どちらかを使用できます...

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ファイル 。これは、cygwinターミナルを起動するときに$ PATHおよびその他の依存関係を設定するという点で重要です。 -lまたは--loginを含めない場合、bashビルトイン以外を呼び出すと「コマンドが見つかりません」と表示されます。

2の違いは、行うことの違いのようなものです...

bash script_to_interpret.sh

...そして...

./executable_script.sh

... * nixで。前者は、bashを使用してスクリプトを解釈します。後者はスクリプトを実行し(chmod +x executable_script.shがある場合のみ)、その "Shebang" 行に従って解釈します。後者の方法は、ソースからコンパイルされた* nixバイナリのように、実行可能ファイルがまったくスクリプトではない場合にも行うことです。

17
Felipe Alvarez

しばらくの間、これに対する解決策を見つけることができませんでしたが、最終的には適切なミックスが得られました。

PATHにcygwinがある場合、単純に次を実行できます。
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

10
studgeek

スクリプトの実行中は端末を閉じることができないため、次のコマンドを試してください。

"Nohup C:\foo.bsh; exit" 

これにより、スクリプトがバックグラウンドになり、端末から切り離され、端末が消えるようにすぐに終了します。このアプローチではウィンドウはまだ「フラッシュ」するかもしれませんが、結果はあなたが得ているものよりも良いはずです。

4
Dana the Sane

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
3
brlinton

別の不完全な可能性は、ショートカットを介してスクリプトを実行し、ショートカットの「実行」オプションを「最小化」に設定することです。

2
anon

Cygwinをインストールしたディレクトリに移動します(私のマシンではc:/ cygwin64/binです)そこに「bash.exe」と入力するだけです

0
Serge_k