第17回 リダイレクトとパイプを使おう:>・>>・|でコマンドをつなぐ方法 | はじめてのシェルスクリプト

* 当サイトでは、コンテンツの一部に広告を掲載しています。

System Note $ cat /proc/ai-disclosure

本記事の構成および論理分析にはAI(人工知能)を使用しています。情報の正確性は、システム管理者(UNIXユーザー)による手動検証済みです。

第17回 リダイレクトとパイプを使おう:>・>>・|でコマンドをつなぐ方法 | はじめてのシェルスクリプト

はじめてのシェルスクリプト | 第17回

目次

はじめに

この連載では、macOS のターミナルで sh を使いながら、シェルスクリプトの基本を順番に学んでいきます。

前回(第16回)では、ファイルやディレクトリの存在を確認してから処理するという考え方を学びました。スクリプトが安全に動くための大切な視点でしたね。

ターミナルで使うコマンドの出力は、通常そのまま画面に表示されます。しかし、「実行結果をファイルに保存したい」「あるコマンドの出力を別のコマンドに渡して続けて処理したい」という場面は、実際の作業でよく出てきます。

第17回では、出力先を変えるリダイレクト(> >>)と、コマンド同士をつなぐパイプ(|)の基本を学びます。この2つを使いこなせると、コマンドを組み合わせた処理の自動化が、ぐっと現実的になりますよ。

この回で学ぶこと

  • > >> < | の意味
  • 標準出力と標準入力の基本
  • 出力をファイルへ保存する方法
  • ファイルへ追記する方法
  • パイプでコマンドをつなぐ方法
  • コマンドを組み合わせる考え方
  • 初学者がつまずきやすい書き方

標準出力と標準入力

標準出力

通常、コマンドの結果は画面に表示されます。

この通常の出力先を標準出力と呼びます。

標準入力

通常、コマンドが入力を受け取るときは、キーボードや入力元のデータを使います。

この入力元を標準入力と呼びます。

リダイレクトとは何か

リダイレクトは、入力先や出力先を変更するための書き方です。

>

> は、出力をファイルへ上書き保存します。

echo "Hello" > output.txt

>>

>> は、出力をファイルへ追記します。

echo "World" >> output.txt

<

< は、ファイルの内容を入力として使うときに使います。

cat < output.txt

パイプとは何か

| は、左側のコマンドの出力を、右側のコマンドの入力へ渡します。

echo "apple banana orange" | wc -w

この例では、echo の出力を wc -w に渡して、単語数を数えています。

サンプルコード

redirect_pipe_sample.sh に次の内容を保存します。

#!/bin/sh

echo "apple" > fruits.txt
echo "banana" >> fruits.txt
echo "orange" >> fruits.txt

cat < fruits.txt
cat fruits.txt | wc -l

実行手順

1. ファイルを作成して保存する

エディタで redirect_pipe_sample.sh という名前のファイルを作成し、次の内容を保存します。

#!/bin/sh

echo "apple" > fruits.txt
echo "banana" >> fruits.txt
echo "orange" >> fruits.txt

cat < fruits.txt
cat fruits.txt | wc -l

2. スクリプトを実行する

次のコマンドを実行します。

sh redirect_pipe_sample.sh

実行結果の例です。

apple
banana
orange
3

最初の3行は cat < fruits.txt による表示です。

最後の 3 は、fruits.txt の行数を数えた結果です。

コードの読み方

echo “apple” > fruits.txt

fruits.txtapple を書き込みます。

すでに内容があれば上書きされます。

echo “banana” >> fruits.txt

fruits.txt の末尾に banana を追記します。

cat < fruits.txt

fruits.txt の内容を入力として使い、その内容を表示します。

cat fruits.txt | wc -l

cat fruits.txt の出力を wc -l に渡して、行数を数えています。

コマンドを組み合わせる考え方

リダイレクトとパイプを使うと、コマンドを単独で使うだけでなく、つなげて使えるようになります。

出力をファイルに保存したり、その出力を別のコマンドへ渡したりすることで、より実用的な処理ができます。

初学者がつまずきやすい点

>>> を混同する

> は上書き、>> は追記です。

同じではありません。

パイプとリダイレクトの違いが分からなくなる

リダイレクトはファイルとのやり取り、パイプはコマンド同士をつなぐと考えると整理しやすいです。

出力先が画面に出ないことに戸惑う

>>> を使うと、出力はファイルへ送られるため、画面には表示されません。

よくあるエラー

ファイルの内容が消えてしまう

> を使うと上書きされます。

追記したい場合は >> を使ってください。

パイプの結果が思った通りにならない

左側の出力が、右側のコマンドにそのまま渡されているか確認してください。

ファイルを読み込めない

対象のファイルが存在するかを確認してください。

ls で確認すると分かりやすいです。

練習用コード

次の内容で pipe_practice.sh を作成して実行してみてください。

#!/bin/sh

echo "red" > colors.txt
echo "blue" >> colors.txt
echo "green" >> colors.txt

cat colors.txt
cat colors.txt | wc -l

色を追加したり、ファイル名を変えたりして、結果がどう変わるか確認してください。

この回で理解しておくこと

  • 標準出力は通常の画面出力である
  • 標準入力は通常の入力元である
  • > は上書き、>> は追記に使う
  • < は入力元としてファイルを使う
  • | はコマンドの出力を別のコマンドへ渡す
  • リダイレクトとパイプを使うと処理を組み合わせやすくなる

まとめ

今回は、リダイレクトとパイプを使って、出力先を変えたり、コマンド同士をつないだりする基本を確認しました。

これらを使えるようになると、コマンドを組み合わせた実用的な処理を書きやすくなります。

次回は、コマンド置換を使う方法を学びます。

次回予告

次回は「コマンド置換を使ってみよう」です。

$(...) を使って、コマンドの結果を変数へ入れる方法を確認します。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

のいのアバター のい UNIX Cafe マスター

Macintosh Color Classicから始まった旅は、長いWindows時代を経て、Windows10のサポート終了をきっかけにUNIXの世界へ戻ってきました。UNIX Cafeでは、UNIX・Linux・そしてMacな世界を、むずかしい言葉を使わず、物語のように書いています。プログラミングは、アイデアをコンピューターに伝えるための言葉です。簡単な単語と文法を覚えれば、誰でもコマンドを使えます。ぜひ一度、やさしいプログラミングの世界をのぞいてみてください。

Created by UNIX Cafe

目次