| サンプル集 |
|
■VC ■C# ■Java ■BorlandC ■LinuxC ■MS-DOS ■bash ■Excel VBA ■VBScript ■PHP ■HTML ■perl ■iPhone ■Android ■Lua ■WordPress ■PowerShell ■Python ■Flutter ■Rust ■Node.js ■other |
| Linuxコマンド |
| 用語集 |
| debian メモ |
| apache2 メモ |
| MySQL メモ |
| Oracle メモ |
| PostgreSQL |
| HOME |
リダイレクトの > と >> の調査をします。
◆環境| OS | Windows 10 Home 22H2 |
|---|
①標準出力をリダイレクト
標準出力をout.logというファイルへ出力するよう指定します。
>copy a b > out.log
out.logの内容を見てみます。
>type out.log
指定されたファイルが見つかりません。
指定されたファイルが見つかりません。
実際にはファイルがないため、標準エラー出力にエラーメッセージが出力されたと推測されます。 ただ、リダイレクトでは標準出力と標準エラー出力は別に出力されると思うのでこの動作は謎です。
②標準出力と標準エラー出力をリダイレクト
標準出力と標準エラー出力でファイルを分けてみます。
>copy a b > out.log 2 > err.log
out.logファイルはできず、err.logファイルができて内容は前回のout.logと同じでした。
③標準出力と標準エラー出力をリダイレクト②
2と>の間を詰めたところ動きが変わりました。
>copy a b > out.log 2> err.log
>dir
2024/12/30 14:43 0 err.log
2024/12/30 14:43 38 out.log
>dir
2024/12/30 14:43 0 err.log
2024/12/30 14:43 38 out.log
err.logは0バイト、out.logには以前と同じ内容が出力されていました。
④標準エラー出力を標準出力へリダイレクト
標準エラー出力を標準出力にリダイレクトしてみます。
>copy a b > out.log 2>&1
out.logに同じものが出力されています。
⑤標準エラー出力を標準出力へリダイレクト①
2>と&1の間に空白を入れてみます。
>copy a b > out.log 2> &1
& の使い方が誤っています。
& の使い方が誤っています。
⑥標準エラー出力を標準出力へリダイレクト②
2と>の間に半角空白を入れたところ「ハンドルを複製できない」というメッセージが表示されました。
>copy a b > out.log 2 >&1
ハンドル 1 のリダイレクト中に
ハンドルを複製できませんでした。
ハンドル 1 のリダイレクト中に
ハンドルを複製できませんでした。
「2 >」と「2>」で解釈が違うようです。
⑦標準エラー出力を標準出力へリダイレクト③
>と&1の間を空けてみます。
>copy a b > out.log 2 > &1
& の使い方が誤っています。
& の使い方が誤っています。
⑧copyコマンドからdirコマンドで検証
dirコマンドでファイルがないと標準エラー出力にエラーが出力されるようです。
>dir *.abc > out.log 2> err.log
>dir
2024/12/30 21:08 26 err.log
2024/12/30 21:08 148 out.log
>type out.log
ドライブ C のボリューム ラベルは OS です
ボリューム シリアル番号は C43E-C3C1 です
C:\src のディレクトリ
>type err.log
ファイルが見つかりません
>dir
2024/12/30 21:08 26 err.log
2024/12/30 21:08 148 out.log
>type out.log
ドライブ C のボリューム ラベルは OS です
ボリューム シリアル番号は C43E-C3C1 です
C:\src のディレクトリ
>type err.log
ファイルが見つかりません
⑨エラーがない状態での検証
>dir > out.log 2> err.log
>dir
2024/12/30 21:25 0 err.log
2024/12/30 21:25 443 out.log
>dir
2024/12/30 21:25 0 err.log
2024/12/30 21:25 443 out.log
エラーがなくても2>を指定すると0バイトでファイルが作成されるようです。
出力結果だけだと標準出力か標準エラー出力かの見分けがつかないですね。
| ① | > out | 正常動作 |
| ② | > out 2 > err | 謎 |
| ③ | > out 2> err | 正常動作だった模様 |
| ④ | > out 2>&1 | 正常動作(標準出力にリダイレクト) |
| ⑤ | > out 2> &1 | ERROR(& の使い方が誤っています。) |
| ⑥ | > out 2 >&1 | ERROR(ハンドルを複製できませんでした。) |
| ⑦ | > out 2 > &1 | ERROR(& の使い方が誤っています。) |
| ⑧ | > out 2> err | 正常動作。標準エラー出力あり。 |
| ⑨ | > out 2> err | 正常動作。標準エラー出力なし。(③と同じ?) |
ファイルの追加書き込み
>だけだと実行する都度ファイルが新規作成されます。 以前の内容を残したまま追加出力したい場合、>>のように>を2つ使います。
| 1 | >> out 2> err | 標準出力だけ追加。標準エラー出力は毎回新規作成。 |
| 2 | >> out 2>> err | 標準出力も標準エラー出力も追加。 |
| 3 | >> out 2>&1 | 標準エラー出力を標準出力にリダイレクトし追加。 |
| 4 | >> out 2>>&1 | 標準エラー出力を標準出力にリダイレクトする指定を>>にしても動作は同じ。 |
| 5 | > out 2>>&1 | 標準出力が>だけだと標準エラー出力を>>にしても追加にならない。 |
分かったことまとめ
- 2>で1つの固まり。
- リダイレクトする場合、2>&1で1つの固まり。
- 2>>&1でのリダイレクトは意味がなさそう。標準エラー出力を標準出力にリダイレクトするので、ファイルの新規作成か追加は標準出力の指定に従う模様。
Copyright (C) 2024 ymlib.com
