• ベストアンサー

stderrのリダイレクト方法

標準エラー出力stderrに書き込まれた文字を、リダイレクトでファイルに流し込む方法はあるでしょうか? 意図的にできないようにしたのがstderrの気もしますが、念の為 質問させて頂きました。 どうか宜しくお願い致します。

noname#32535
noname#32535

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

Windowsでも、NT系で cmd.exeを使っていれば #1さんの例と同様 コマンド 2> リダイレクト先 で標準エラー出力をリダイレクト可能です。 command.com(9x系)だとちょっとしたツール(DOS時代からありました)を 使う必要があります。

noname#32535
質問者

お礼

なんと、Win/UNIX を問わないとは! 感激です。貴重な情報、どうも有難うございました!

その他の回答 (3)

回答No.4

3>ファイル名 2>&3 (sh/bashの場合。UNIX/Linux系ですよね?)

noname#32535
質問者

お礼

当方、Winです。 が、有難うございます!

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

UNIX の場合はシェルによって違いますよ~>#1 bsh系なら 2> filename という形で標準エラー出力だけをファイルにリダイレクトできますが, csh系だと >& filename で「標準出力と標準エラー出力の両方」をリダイレクトしちゃいます. 一応標準エラー出力だけをリダイレクトすることも努力と根性でできたはずですが.

noname#32535
質問者

お礼

有難うございます! UNIXはシェル毎に注意を要するのですね! 気をつけたいと思います。

  • galluda
  • ベストアンサー率35% (440/1242)
回答No.1

がると申します。 UNIX系であれば 2> で可能です。 具体的には。 コマンド 2> stderrファイル って感じです。

noname#32535
質問者

お礼

2>なんてあるんですね。初めて知りました。 どうも有難うございました

関連するQ&A

  • コンソール出力をテキストに出力する方法(コンソール出力は残しつつ)

    【質問】  Perl内部で実行される実行ファイル(.exe)のコンソール出力(STDOUT,STDERR)をテキストファイルに出力したい。(Perlのコンソール出力も含む。) ※コンソール出力は残しつつ。 (コマンドプロンプトの)パイプとリダイレクトを使用して上手くいくかと思ったのですが、標準出力と標準エラーとでは標準エラーが先に出力されてしまい、本来出力される順番で出力されない。(標準出力はバッファにたまるため??) 何かいい方法はありませんでしょうか? 【環境】  Windows2000  Active Perl 5.8.8

    • ベストアンサー
    • Perl
  • bashのリダイレクト >&- について

    みなさん、こんにちは。 Linuxのsh、bashのリダイレクトに関する質問です。 とあるサイトにて、下記のシェルスクリプトは何を表しているか? という問題がありまして # 【問題】ここから #!/bin/sh exec 3>&1 status=$({ { command1 3>&- 4>&-; echo $? 1>&4 3>&- 4>&-;} | command2 1>&3 3>&- 4>&-;} 4>&1) if [ $status != 0 ]; then ... fi # 【問題】ここまで 問題の答え自体もよく分かっていないのですが、 その前に、「>&-」の部分が何を意図しているのかが理解できておりません。 「2>&1」で、標準エラー出力の出力先を、標準出力の出力先に切り替える。 という認識なのですが、「>&-」はどのような意味なのでしょうか。 どなたかご教示いただけないでしょうか。

  • シェルでリダイレクトができない

    bashを使っているのですが、 シェルの中で、 ./実行ファイル hoge1 hoge2 > hoge.txt という感じで二つの引数を使って動作する実行ファイルの標準出力を、リダイレクトしたいです。 ですが、テキストに出力をリダイレクトできません。 こんな感じの書き方でリダイレクトできないもんなんでしょうか? 教えて欲しいです。 よろしくお願いします。

  • Windowsのリダイレクトエラー

    Windowsのバッチファイルでリダイレクトを用い、出力ログなどを取得しています。 リダイレクトの出力ファイル名が複数のバッチファイルで使用されています。 そのうちいくつかのバッチファイルが同時に実行されてリダイレクトファイルが同時に書かれようとした場合、エラーになっているようなのです。 おそらくリダイレクトファイルの書き込みエラーだと思われます。 このエラーを解除または感知する方法などなりますか? 実は、このエラーを感知すると、バッチファイルをJP1が起動かけているので、JP1の方でエラー感知してしまうのです。 バッチファイルのタイミングをずらせばいいんじゃないかと思われるでしょうが、なかなか難しい状況なのです。 良い案お待ちしております。

  • 標準出力/標準エラー出力を時系列にファイルへ

    画面への文字出力が、標準出力(stdout)と標準エラー出力(stderr)の 両方もつような、コンソールアプリ(exe形式)のツールを動作させたときに、 画面上には、 stdout1 STDERR1 stdout2 STDERR2 stdout3 STDERR3 のような順番で処理順にメッセージが出るのですが、 これをファイルに落とそうとして、  C:\>hoge.exe 1> log.txt 2>1& とすると、log.txtの中身が、 C:\>type log.txt STDERR1 STDERR2 STDERR3 stdout1 stdout2 stdout3 のような標準エラー出力が先に吐き出される順番になってしまっています。 これを、exe実行前に、MS-DOSとして何らかの設定を行うことで、 ファイルに落とした時も、出力された文字が時系列に保存されるように する方法はあるでしょうか? よろしくお願いします。

  • bashでfold整形後のリダイレクトについて

    bashのスクリプトについて質問させてください。 現在、サーバプログラムexecの起動とログ出力を以下のコマンドで実行しております。 exec > server.log しかし、execの出力行の中に、server.logをviで開くことができないような、文字数の多い行が出力されるようになったため 整形してリダイレクトしたいと考えております。そこで exec | fold -w 256 としたところ、exec起動時のログが整形されて正しく標準出力されました。 しかし、これを下記のようにリダイレクトしてファイル出力した場合、起動時のログが尻切れとなり、最後まで出力されませんでした。 exec | fold -w 256 > server.log 起動後にサーバに接続し、以降のサーバーログを出力させると、尻切れから先が出力されはしたのですが、 現在、起動後にserver.logを確認すると最終行の「server startup OK」という文字が確認できない、という状況になっております。 リダイレクトされたファイルにも、標準出力と同期して最終文字まで出力させる方法はございますでしょうか? よろしくお願いいたします。

  • あるファイルが他プロセスによってオープンされているかどうかを確認する方法

    2つのディレクトリの内容を比較し、その結果を標準出力に出力するプログラム(diffのラッパーです)を作成していますが、以下のように出力を比較対照のディレクトリ内のファイルにリダイレクトした場合、このファイルまで比較してしまいます。 $ mydiff . directory > diffresult これを防ぐため、ファイルを比較する際に、ファイルが他プロセスによってオープンされているかどうか調べ、その旨をstderrに出力するようにしたいのですが、その方法がわからず困っていますのでよろしくお願いします。

  • 標準出力と標準エラー出力を変数にセットしたいです。

    始めたばかりの初心者の為、変な質問でしたら申し訳ありません。 標準出力と標準出力を別々の変数にセットしたいのですが、そのやり方が分からず困っています。 やりたいことは、 コマンド(diffやcatなどの)実行結果の標準出力と標準エラー出力を それぞれ「任意の文字_受取パラメータの値」にセットすることをしたいです。 下記は、1回ファイルに出力して、それを読んで変数にセットするように記述したものです。 ※記述間違っていたらすみません。 ファイルに書かなくても、パイプやその他コマンドなどで出来る方法はないでしょうか? ex) test.sh 1.txt 2.txt TEST01 で実行 #!/bin/sh parm1 = $1 parm2 = $2 parm3 = $3 diff "${parm1}" "${parm2}" > test.log 2> err.log eval w_stdout_${parm3}=¥`cat test.log¥` eval w_stderr_${parm3}=¥`cat err.log¥` eval echo "stdout:¥"¥{w_stdout_${parm3}}¥"" eval echo "stderr:¥"¥{w_stderr_${parm3}}¥"" ※実行した結果 stdout:diff結果 stderr:空白 お手数ですが、何卒宜しくお願い致します。

  • PHP5の外部コマンド実行で、バッチファイルのエラーレベル値と標準出力(標準エラー?)の3つを取得できる関数はありますか?

    PHP5のWindows版を使っています。 外部コマンドを実行して、Windowsのバッチファイルのエラーレベル値と標準出力(標準エラー?)の3つを取得できる関数はありますか? test.cmdの中味 echo 標準出力内容です。 echo バッチファイルで標準エラー出力はわかりませんが exit /b 2 list ($ret, $stdout, $stderr) = 何か関数("test.cmd") echo $ret; // 2 echo $stdout; // 標準出力内容です。\nバッチファイルで標準エラー出力はわかりませんが echo $stderr; // ???? よろしくお願い致します。

    • ベストアンサー
    • PHP
  • VisualC++のリダイレクトについて

    VisualC++で出力結果をコマンドプロンプト上ではなく、ファイルへリダイレクトする方法を教えてください。 どこで設定すればよいのか見つかりません。よろしくお願いします。

専門家に質問してみよう