English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Shell入力/出力リダイレクト

ほとんどのUNIXシステムコマンドは、あなたのターミナルから入力を受け取り、生成した出力をあなたのターミナルに送信します。コマンドは通常、標準入力と呼ばれる場所から入力を読み取り、デフォルトでは、これがあなたのターミナルです。同様に、コマンドは通常、標準出力に結果を出力します。デフォルトでは、これもあなたのターミナルです。

リダイレクトコマンドリストは以下の通りです:

コマンド 説明
command > file commandの出力をfileにリダイレクトします。
command < file commandをfileに入力リダイレクトします。
command >> file 出力をfileに追加モードでリダイレクトします。
n > file ファイル記述子がnのファイルをfileにリダイレクトします。
n >> file ファイル記述子がnのファイルをfileに追加モードでリダイレクトします。
n >& m 出力ファイルmとnを合併します。
n <& m 入力ファイルmとnを合併します。
<< tag tagとtagの間の内容を入力として扱います。

注意するべきは、ファイル記述子0が標準入力(STDIN)であることです。1 は標準出力(STDOUT)です。2 は標準エラーハンドリング(STDERR)です。

出力リダイレクト

リダイレクトは特定のシンボルをコマンド間に挿入することで実現されます。特に、これらのシンボルの文法は以下の通りです:

command1 > file1

このコマンドはcommandを実行します1その後、出力の内容をfileに保存します1。

注意:file1ファイル内の既存の内容は新しい内容に置き換わります。新しい内容をファイルの末尾に追加するには、>>演算子を使用してください。

オンラインサンプル

以下のwhoコマンドを実行します。これは、コマンドの完全な出力をユーザーファイル(users)にリダイレクトします:

$ who > users

実行後、ターミナルには情報が表示されません。これは、出力がデフォルトの標準出力デバイス(ターミナル)から指定されたファイルにリダイレクトされたためです。

catコマンドを使用してファイルの内容を確認できます:

$ cat users
_mbsetupuser console  Oct 31 17:35 
tianqixin    console  Oct 31 17:35 
tianqixin    ttys000  Dec  1 11:33

出力リダイレクトはファイルの内容を上書きします。以下の例をご覧ください:

$ echo "基础教程网:ja.oldtoolbag.com" > users
$ cat users
基本チュートリアルウェブ:ja.oldtoolbag.com
$

ファイルの内容が上書きされたくない場合は、>>を使用してファイルの末尾に追加することができます。例えば:

$ echo "基础教程网:ja.oldtoolbag.com" >> users
$ cat users
基本チュートリアルウェブ:ja.oldtoolbag.com
基本チュートリアルウェブ:ja.oldtoolbag.com
$

入力リダイレクト

出力リダイレクトと同様に、Unixコマンドはファイルから入力を取得することもできます。文法は以下の通りです:

command1 < file1

このようにして、本来キーボードから入力を取得する必要のあるコマンドがファイルの読み取り内容に転移されます。

注意:出力リダイレクトは大于号(>)、入力リダイレクトは小于号(<)です。

オンラインサンプル

上記の例に続いて、users ファイルの行数を計算するために以下のコマンドを実行します:

$ wc -l users
       2 users

入力を users ファイルにリダイレクトすることもできます:

$  wc -l < users
       2

注意:上記の2つの例の結果は異なります:最初の例では、ファイル名を出力します;二つ目の例では、標準入力から内容を読み取るだけなので、出力しません。

command1 < infile > outfile

入力と出力を同時に置き換え、commandを実行します1ファイル infile から内容を読み取り、出力を outfile に書き込みます。

リダイレクトの詳細

一般的には、それぞれの Unix/Linux コマンドは実行中に必ず3つのファイルをオープンします:

  • 標準入力ファイル(stdin):stdinのファイルディスクリプタは0で、Unix プログラムはデフォルトで stdin からデータを読み取ります。

  • 標準出力ファイル(stdout):stdoutのファイルディスクリプタは1Unix プログラムはデフォルトで stdout にデータを出力します。

  • 標準エラー出力ファイル(stderr):stderrのファイルディスクリプタは2Unix プログラムはエラーメッセージを stderr ストリームに書き込みます。

デフォルトでは、command > file は stdout を file にリダイレクトし、command < file は stdin を file にリダイレクトします。

stderr にリダイレクトしたい場合は、以下のように書きます:

$ command 2>file

stderr を file ファイルの最後に追加したい場合は、以下のように書きます:

$ command 2>>file

2 標準エラー出力ファイル(stderr)を示します。

stdout と stderr を合併して file にリダイレクトしたい場合は、以下のように書きます:

$ command > file 2>&1
または
$ command >> file 2>&1

stdin と stdout の両方をリダイレクトしたい場合は、以下のように書きます:

$ command < file1 >file2

command コマンドは stdin を file にリダイレクトします。1stdout を file にリダイレクトします。2。

Here Document

Here Document は Shell 中の特別なリダイレクト方法で、入力をインタラクティブな Shell スクリプトやプログラムにリダイレクトするために使われます。

その基本的な形式は以下の通りです:

command << delimiter
    document
delimiter

その機能は、 delimiter 間の内容(document) をコマンドにインプットとして渡すことです。

注意:

  • delimiterの後ろには必ず改行を書き込み、先頭には何も書かないようにしてください。これにはスペースやタブのインデントも含まれます。

  • のdelimiter前後のスペースは無視されます。

オンラインサンプル

コマンドラインでwcを使用して -l コマンドはHere Documentの行数を計算します:

$ wc -l << EOF
    ようこそ
    基礎教程網
    ja.oldtoolbag.com
EOF
3          # 出力結果为 3 行
$

Here Documentもスクリプトに使用できます。例えば:

#!/bin/bash
# author:基礎教程網
# url:ja.oldtoolbag.com
cat << EOF
ようこそ
基礎教程網
ja.oldtoolbag.com
EOF

上記のスクリプトを実行すると、以下の結果が表示されます:

ようこそ
基礎教程網
ja.oldtoolbag.com

/dev/null ファイル

特定のコマンドを実行したいが、スクリーンに表示されたくない場合は、出力を以下にリダイレクトすることができます: /dev/null:

$ command > /dev/null

/dev/null は特別なファイルで、そこに書き込まれた内容はすべて捨てられます。ファイルから内容を読み取ろうとすると何も読み取れません。しかし /dev/null ファイルは非常に役立ちます。コマンドの出力をここにリダイレクトすると、"出力を禁止"の効果が得られます。

stdoutとstderrを非表示にしたい場合は、以下のように書くことができます:

$ command > /dev/null 2>&1

注意:0 は標準入力(STDIN)です。1 は標準出力(STDOUT)です。2 は標準エラーハンドリング(STDERR)です。

ここでは 2> の間にはスペースが入ってはいけません。2> 一体的な場合にのみエラーハンドリングを表示します。