I/O リダイレクトの可能な正しい組み合わせ

I/O リダイレクトの可能な正しい組み合わせ
sqlite -echo test.sqlite < test44.sql > test44.out 1>&2.

sqlite -echo test.sqlite < test44.sql > test44.out 2>&1.

2つのI / Oリダイレクタが交換されても出力は変わりません。

答え1

1>&2標準エラーがある場所に標準出力をリダイレクトできます。これは一般的ではありません。

あなたとは対照的に2>&1、これはより一般的です。

この方法:

$ echo "hello world" >hello.out 1>&2
hello world

$ cat hello.out

エラーストリームから「hello world」を受け取りますが、空の>hello.outファイルも作成されますhello.out(または存在する場合は切り捨てられます)。

これは「勝つ」行の最後のリダイレクトですが、コマンドが実行される前にリダイレクトが左から右に解析されるとファイルが生成されます。

あなたの場合(.コマンドラインの末尾の内容はおそらく誤字になるでしょう。そうですか?):

$ sqlite -echo test.sqlite <test44.sql >test44.out 1>&2

echoこれは上記のテストと同じように機能するはずです。なぜならsqlite(または少なくともsqlite3私がテストしているOpenBSDでは)、実行されたSQLコマンドが標準出力に出力されるからです。

関連情報