Windows のコマンドラインから mintty で C プログラムを実行する

Windows のコマンドラインから mintty で C プログラムを実行する

mintty で C プログラムを実行し、stderr出力ストリームをファイル debug.txt に転送したいのですが、これは次のようにして実現できます。

./zombie_jump 2>debug.txt

ただし、Windows のコマンド ラインからこれを起動すると問題が発生します。

mintty -s 70,55 ./zombie_jump 2>debug.txt

2>debug.txtはコマンドから省略されたかのように動作します(プログラムは実行されますが、エラーストリームは迂回されません)。

mintty -s 70,55 "./zombie_jump 2>debug.txt"

「./zombie_jump 2>debug.txt」を送信したかのように動作し、エラーが発生しますFailed to run ./zombie_jump 2>debug.txt: No such file or directory

どのようなコマンドを使用すればよいですか?

編集:

mintty -s 70,55 './zombie_jump 2>debug.txt'

を返しFailed to run ./zombie_jump : No such file or directory、 というファイルを作成しますdebug.txt'

答え1

ここでのエラーは、非常に簡単に理解できます。minttyプログラムの出力を (おそらく)cmd出力リダイレクトが設定されている に転送しません。代わりに、独自の GUI ウィンドウに出力を表示します。結局のところ、ターミナル エミュレーターはそのために設計されています。:)

出力リダイレクトはシェルの機能です。 を実行するだけではmintty my_command、シェルはまったく使用されません。代わりに、minttyは を直接起動しますmy_command

引用符で囲むと、その名前 (全体) のコマンドを探すことに"my_command 2>out.err"なります。これは、通常の Linux シェルで入力するのと同じです。どちらの方法でも機能しません。mintty"my_command 2>out.err"

これで、これがシェル機能であることがわかったので、シェルが必要であることは明らかです。一般的な選択肢は Bash です。Bash には、起動時に実行するコマンド文字列を次のように渡すことができます。

bash -c "my_command 2>out.err"

つまり、次のように使用できますmintty

mintty /bin/bash -c "my_command 2>out.err"

私のマシンでは、この方法で起動された Cygwin Bash シェルは、 にある作業ディレクトリを継承しますcmd

関連情報