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
。