- 締切済み
標準エラー出力の可否操作について
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- toysmith
- ベストアンサー率37% (570/1525)
/dev/nullは入力データを捨てるための特殊デバイスです。 > popen()の引数ないに 2> /dev/nullと直接書いても 少し危険ですね。 環境変数SHELLが/bin/tcshだったりすると動作しません。 (標準エラー出力のリダイレクト方法が違うため) 「sh,bash,ksh以外のシェルは使わない!」と言う仕様ならオッケーだと思います。
- toysmith
- ベストアンサー率37% (570/1525)
・popenを使わず自前でpipeを制御する forkした後、子プロセス側でclose(2)すれば親プロセスのstderrを生かせたまま子プロセスのstderrを殺せます。 ・popenで起動させるプログラムをシェルスクリプトにする シェルスクリプト内で標準エラーを殺しておくだけです。 #!/bin/sh ls $* 2> /dev/null みたいな感じで。 方法は他にもありそうですね。
関連するQ&A
- コマンド実行結果のエラー標準出力制御について
unix-cにて子プロセスにてexecvp()を使用しmailxコマンドを実行し、親プロセスにてmailxコマンドの実行結果に出力処理をしたいのですが、 どんなことがあろうと(パスが違うなど)標準出力させたくありません。 現在、fork(),pipe()を駆使して正常系は上手くできるようになったのですが、エラー時の標準出力(親、子とも)を防ぐことが できません。何か良い方法はないでしょうか?
- ベストアンサー
- C・C++・C#
- teeコマンドを使わずにUNIXで標準出力とエラー出力を、ファイルと標準出力の両方に出すには?
UNIX系のBシェルで、 コマンドを実行して、 その標準出力とエラー出力をログファイルに出力し、 かつ、同じものを標準出力にも出力したいのです。 また、その後でコマンドの戻り値$?をエラーチェックしたいです。 このため、パイプでteeコマンドを使用すると戻り値が上書きされてしまいます。 いったん一時ファイルに出力するしかないのでしょうか?
- 締切済み
- その他([技術者向] コンピューター)
- popen使用時のエラー出力を出したくない
popen( "コマンド", "r" ); このときコマンド実行時のエラー出力を出さないようにしたんですけど、 popen( "コマンド >& /dev/null", "r" ); とすると、 sh: /def/null: 番号が正しくありません。 となってしまいます。 これは、どういうエラーなんでしょうか? とにかく、プロンプトに余計なエラーを出したくないのですが、どうすれば消えるでしょうか?
- ベストアンサー
- C・C++・C#
- DOSコマンドで、標準出力を出力しないようにするには?
Windowsのバッチファイルでコマンドを実行する際、標準出力をディスプレイに表示したくないのですが、どのようにするのが、一般的なのでしょうか? CDで実行するので、ファイルに出力はしたくありません。 UNIXとかだと、nullにパイプするようなのですが…。
- ベストアンサー
- その他(ITシステム運用・管理)
- Cシェルで標準エラー出力への出力方法を教えてください。
Cシェルにおいて、通常echo文は標準エラー出力へ表示されます。 echo文のように引数で指定した文字列を標準エラーとして出力するような コマンド?があったら教えてください。 c言語では fprintf(stderr,"test!\n"); などとやりますが、Cシェルではありますでしょうか?
- ベストアンサー
- その他(プログラミング・開発)
- 標準エラーと標準出力をファイルに順番に保存するには?
こんばんは、 OSのコマンドをperlから実行して、結果をファイルに出力した 場合、(` `, system()) 標準出力と標準出力エラーが、画面に表示した時のように 順番に保存してくれません。 バッファーの関係でしょうか? どのようにしたら、画面に表示した時のように順番に ファイルに保存できるでしょうか?
- 締切済み
- Perl
- 標準出力、標準エラー出力 以外の出力??
Linux上のCADツールが端末に出力してくる文字列をファイルに落とすことができないで困っています。 どのようなことが起きているのでしょうか? また、このような場合、どのようにしたら端末上に流れる文字をすべてファイルとして保存できるのでしょうか。 %> CAD_TOOL.exe |& tee log として標準出力、標準エラー出力の両方をlogというファイルにおとしたつもりなのですが、画面に流れたすべての文字列が保存されている訳ではないのです。 Linuxの出力には標準出力と標準エラー出力の2つ(だけ)がある[*]、と思っていましたが他の出力方法があったりするのでしょうか。。。 [*]http://x68000.q-e-d.net/~68user/unix/pickup?%A5%EA%A5%C0%A5%A4%A5%EC%A5%AF%A5%C8 宜しくお願いします。
- 締切済み
- Linux系OS
- 標準出力と標準エラー出力を変数にセットしたいです。
始めたばかりの初心者の為、変な質問でしたら申し訳ありません。 標準出力と標準出力を別々の変数にセットしたいのですが、そのやり方が分からず困っています。 やりたいことは、 コマンド(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:空白 お手数ですが、何卒宜しくお願い致します。
- ベストアンサー
- Linux系OS
- 標準出力/標準エラー出力を時系列にファイルへ
画面への文字出力が、標準出力(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として何らかの設定を行うことで、 ファイルに落とした時も、出力された文字が時系列に保存されるように する方法はあるでしょうか? よろしくお願いします。
- ベストアンサー
- Windows系OS
お礼
popen()の引数ないに 2> /dev/nullと直接書いても 上手くいきました。 これでちょっとやってみようと思います。 ところで /dev/nullってどんな意味をもつのでしょうか?