標準出力 (stdout)
100%

テキスト操作 · レッスン 1

標準出力 (stdout)

標準出力が端末へ流れる仕組みと、Bash でファイルへリダイレクトする方法を学びます。

プログラムは入出力ストリームを通じて情報をやり取りします。stdout と略される標準出力は、通常の結果を出すためにプログラムが使うストリームです。端末では、シェルが初めにこのストリームを端末表示へ接続します。

標準出力へ書き込む

echo コマンドは引数を stdout へ書き込みます。

$ echo Hello World
Hello World

stdout はファイル記述子 1 で、複数のストリームをリダイレクトするときに役立つ番号です。プログラムには標準入力の stdin と標準エラーの stderr もあります。次のレッスンで扱います。

リダイレクトなしの場合、対話型端末で echo Hello World は通常の出力をどこへ送りますか?

`>` でファイルを置き換える

Bash は > を出力リダイレクト演算子として解釈します。コピー先ファイルを開き、コマンドの stdout を接続します。

$ echo Hello World > peanuts.txt

stdout は peanuts.txt へ向かうため、テキストは端末に現れません。ファイルがなければシェルが作成し、存在すればコマンドの書き込み前に切り詰めるため、以前の内容は失われます。

cat で結果を確認します。

$ cat peanuts.txt
Hello World

notes.txt にすでにテキストがあります。echo new > notes.txt は何をしますか?

シェルはコマンドの実行前にコピー先を開くため、Enter を押す前にパス名を確認してください。綴りを誤ったり、意図しない既存ファイルを指定したりすると、コマンド自体が後で失敗しても切り詰められます。

`>>` でファイルへ追記する

既存内容の後へ新しい stdout を追加する場合は >> を使います。

$ echo Another line >> peanuts.txt
$ cat peanuts.txt
Hello World
Another line

> と同じく、>> も存在しないコピー先を作成します。既存ファイルの開き方が異なり、>> は切り詰めず追記します。

status.log の既存内容を消さず、末尾へ Finished を追加するコマンドはどれですか?

リダイレクトを解釈するのはシェル

シェルが >>> を認識し、プログラムへ渡す引数から取り除き、ファイルを開いてストリームの接続を準備します。コマンド自体は通常どおり stdout へ書き込むだけです。

したがって、同じリダイレクト構文を多数のコマンドで使えます。

$ pwd > current-directory.txt
$ ls -la >> directory-list.txt

pwd > current-directory.txt> を通常解釈するのは誰ですか?

標準ストリームのリダイレクトを練習するには、次のハンズオンラボを利用してください。

  1. **Linux で入出力をリダイレクトする**:>>>2>tee などで stdout、stderr、stdin を操作し、コマンドのデータフローを制御します。

レッスン完了

標準出力 (stdout) を完了しました

これで置換と追記を混同せず、コマンドの標準出力をリダイレクトできるようになりました。

  • stdout を通常のコマンド結果用ストリームとして認識する。

  • > でファイル内容を置き換える。

  • >> で既存内容を保持して追記する。

  • シェルがコピー先を開く前に、そのパスを確認する。

学習進捗を保存

無料アカウントを作成してこのレッスンを保存し、どのデバイスからでも学習を続けられます。

無料アカウントを作成
次のレッスン
テキスト操作 に戻る