モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

UNIX リダイレクションについて

モーダルを閉じる

ステッカーを選択してください

お支払い手続きへ
モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2013/08/08
最終更新最終更新
2015/11/12
記事区分記事区分
一般公開

「下記ファイルディスクリプタがプロセスと結びつける対象ファイル」を別のファイルに変更することをリダイレクションとよびます。実際には、ファイルディスクリプタ1と2の対象ファイルの変更を指すことが多いです。

ファイルディスクリプタとは?

ファイルディスクリプタは「プロセス」と「プロセスが使用するファイル」を結びつけるもので、それらには0,1,2,...と連続した番号が割り当てられています。ファイルディスクリプタ0,1,2は既定値として存在しており、

  • 0: 標準入力とプロセスを結び付けるファイルディスクリプタ
  • 1: 標準出力とプロセスを結び付けるファイルディスクリプタ
  • 2: 標準エラー出力とプロセスを結び付けるファイルディスクリプタ

となります。

ファイルディスクリプタ 1

対象ファイルを「標準出力」から別のファイルに変更します。

ls 1> sample.txt

これはよく使われるため、

$ ls > sample.txt

と省略して記述できます。

ファイルディスクリプタ 2

対象ファイルを「標準エラー出力」から別のファイルに変更します。

$ ls dummydummydummy 2> sample.txt

ファイルディスクリプタ 12 (同時)

同時に変更することもできます。ログの保存の際に便利です。

$ ls . dummydummydummy 1> sample.txt 2> sample.txt

これは以下のように略記できます。

$ ls . dummydummydummy > sample.txt 2> sample.txt

更に略記できます。「&1」は「ファイルディスクリプタ1が対象とするファイル」を表しています。

$ ls . dummydummydummy > sample.txt 2>&1

応用例として、完全に出力内容を捨てるためには、

$ ls . dummydummydummy > /dev/null 2>&1

いわゆる/dev/nullにリダイレクトします。

ファイルへの追記

上書きではなく追記の場合、「n>」ではなく「n>>」とします。ここで、nはファイルディスクリプタの番号です。

$ ls >> sample.txt

「n>&m」はファイルディスクリプタmが追記であればファイルディスクリプタnも追記となり、上書きであれば上書きとなります。「n>>&m」とは記述できません。

ls . dummydummydummy >> sample.txt 2>&1

ファイル内容の消去

rmをするのではなくファイル内だけを消去したい場合、空の結果をそのファイルにリダイレクトして上書きします。

$ :> sample.txt

: は何もしないコマンドです。

Likeボタン(off)0
詳細設定を開く/閉じる
アカウント プロフィール画像

UNIX / TypeScript / AWS / Go

記事の執筆者にステッカーを贈る

有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

>>さらに詳しくステッカーを贈る
ステッカーを贈る コンセプト画像

Feedbacks

Feedbacks コンセプト画像

    ログインするとコメントを投稿できます。

    ログインする

    関連記事

    • シェルスクリプトにおける数値計算
      シェル変数はすべて文字列扱いであるため、数値計算のためには専用のコマンドを用いる必要があります。 整数同士の計算 整数同士の四則演算にはexprコマンドを使用します。 sample.sh #!/bin/sh expr 1 + 1 expr 1 - 1 expr 1 '*' 1 # ワイルドカードと区別するために、クォーテーションで囲う必要があります expr 1 / 1 expr 1 % 1 実行...
    • egrepとgrepの違い
      grepは 'g'lobal 'r'egular 'e'xpression 'p'rint つまり、全体から正規表現で一致したものを抽出するためのコマンドです。egrepは 'e'xtended grep つまりgrepの機能拡張版です。拡張正規表現とよばれる式が使用できるため、grepと比較して高度な抽出が可能になります。とはいえ、grepに'-E'オプションを付与して実行するとegrepとほぼ...
    • シェルスクリプトにおける関数定義
      シェル関数は複数のコマンドをひとまとめにしたものです。引数の取得では、シェルスクリプトの引数と同じ名称の特殊変数を使用します。また、独自のローカル変数を用意することができないため、関数外で使用されている変数の内容を書き換えてしまう危険性があります。 シェル関数は複数のコマンドをまとめたもの sample.sh #!/bin/sh echo1(){ echo 1 } echo1 実行例 $ ...
    • シェルスクリプトでシグナルをキャッチする
      無限ループに陥ってしまったプロセスを強制終了させるためにはCtrl-Cやkillコマンドを利用します。このとき、プロセスにはシグナルというものが送られています。プロセスはシグナルの種類に応じて既定された処理を実行します。trapコマンドを用いると、各シグナル番号に対応する既定の処理を書き換えることができます。 trapコマンド シグナルN1, N2, N3, ...を受けたときに実行するコマンドを...
    • シェルスクリプトにおける反復処理
      for sample.sh #!/bin/sh for i in a b c; do echo $i done ARR=( "abc" "xyz" ) for e in "${ARR[@]}"; do echo $e done 実行例 $ ./sample.sh a b c abc xyz while sample.sh #!/bin/sh cnt=1 while ...