web-dev-qa-db-ja.com

Cygwin内からcmd.exeを実行する

仕事中のメインシェルにCygwinを使用したいのですが、私のグループはいくつかのプロセスにバッチファイルを使用しています。 Cygwinからバッチファイルを実行するためにcmd /c batch.batを実行できると言われました。これは、ある場合には機能し、他の場合には機能しません。これを行うと、バッチファイルの1つが完全に失敗しますが、cmdシェルから実行すると正常に機能します。

私が気付いたもう1つの奇妙な点は、Cygwinからcmd /?を実行すると、出力が得られないことです。これをcmd Shellから実行すると、標準のヘルプが提供されます。 cmd /c cmd /?を実行しても、出力は提供されません。 Cygwinからcmdを実行すると、cmd Shellが表示され、cmd /?を実行すると、ヘルプテキストが表示されますが、改ページはありません。

次に試すことは、まるでStart-> Runに行って「cmd」と入力したかのように、独自のウィンドウ内で実際にcmdを起動する方法を見つけることだと思います。 Cygwin内からこれを行う方法はありますか?

16
Ryan Fox

/?はbashによってパターンとして扱われ、疑問符は1文字に収まるため、Cygwinルートに1文字のファイルまたはディレクトリがある場合、パターンはそれらに置き換えられます。 echo /?は、それが起こっているかどうかを示します。バックスラッシュで疑問符をエスケープできます:/\?。または、引数全体を引用します:'/?'

cygstart c:/windows/system32/cmdは独自のウィンドウでcmd.exeを起動します。

8
ak2

Cygwinシェルから直接バッチファイルを実行できます。cmdへの中間呼び出しも必要ありません。バッチファイルに引数が必要な場合は、Windows形式で引用符で囲む必要があります。 cmd /c 'foo.bat "quoted arguments"'を実行する方が簡単な場合があります。

どの端末でシェルを実行しているのかはわかりません。バッチファイル自体はそれを気にしませんが、バッチファイルから実行されるコマンドは気にします。 CygwinターミナルエミュレータはWindowsコンソールをエミュレートしないため、Cygwinプログラムやstdio専用プログラムには適していますが、Windowsコンソールプログラムには適していません。

通常、Cygwinターミナル(rxvtやminttyなど)でCygwinシェルを実行する場合は、start foo.batを使用して別のWindowsコンソールでトラブルバッチファイルを実行できます。 Windowsコンソールのより良い代替として Console2 を実行し、Console2でWindowsコンソールアプリケーションを実行し、Cygwinターミナル(またはConsole2)でCygwinアプリケーションを実行することをお勧めします。

cmd /?は赤いニシンです。Cygwinルートディレクトリにはおそらく1文字の長さのディレクトリがあるため、シェルは/?を展開し、出力を生成しないスイッチでcmdを実行します。 。