スクリプトprintf
内の aの出力をではなく に送りたい。bash
stderr
stdout
リダイレクトについて、または現在ルーティングされている場所からのリダイレクトについては尋ねていません。出力をデフォルトの ではなく に送信できるようにしたいだけです。stderr
stdout
printf
stderr
stdout
少し実験したところ、次の例に示すように、に追加1>&2
すると、希望どおりに動作するように見えることがわかりました。printf
ただし、bash を使用した経験はありません。私の主な質問は、これを行うための「より良い」方法があるbash
かどうかです。
「より良い」とは、これを行うための、より一般的に使用されている、より慣習的な、またはより慣用的な別の方法があることを意味しますか? より経験豊富な bash プログラマーはどのようにそれを行うでしょうか?
#!/bin/bash
printf "{%s} This should go to stderr.\n" "$(date)" 1>&2
printf "[(%s)] This should go to stdout.\n" "$(date)"
二次的な質問もあります。知りたいからではなく、単に興味があり、何が起こっているのかをよりよく理解したいからです。
上記は、シェルスクリプト内で実行された場合にのみ機能するようです。コマンドラインから試してみると、うまくいかないようです。
これが私の言いたいことの例です。
irrational@VBx64:~$ printf "{%s} Sent to stderr.\n" "$(date)" 1>&2 2> errors.txt
{Sat Jun 9 14:08:46 EDT 2012} Sent to stderr.
irrational@VBx64:~$ ls -l errors.txt
-rw-rw-r-- 1 irrational irrational 0 Jun 9 14:39 errors.txt
printf
上記のコマンドには出力がないことが予想されます。これは、出力が に送信さstderr
れ、次にファイルに送信される必要があるためです。しかし、これは起こりません。は?