シェルのメタキャラクター
シェルのメタ文字は、シェル内で特別な意味を持つ特定の文字 (通常は記号) です。 bash でサポートされているメタ文字は次のとおりです:
- | :コマンドの出力をシンボルの右側のコマンドへの入力として左側に送信します
- & :プロセスをバックグラウンドで実行し、コマンド ラインでの作業を続行できるようにします
- ; :複数のコマンドをこの文字で区切って 1 行にリストできます
- () :コマンドをグループ化し、それらの出力を同じ場所に送信します
- < :このシンボルの右側にリストされているファイルから左側のコマンドの入力を取得します
- > :左側のコマンドの出力を、このシンボルの右側にある名前のファイルに送信します
- スペース タブ
リダイレクト メタキャラクタ
コマンドのリダイレクトは、次のシェル メタ文字によって有効になります:
- 標準入力のリダイレクト (<)
- 標準出力のリダイレクト (>)
- 標準エラーのリダイレクト (2>)
- パイプ文字 (|)
ファイル記述子
各プロセスは、ファイル記述子を操作します。ファイル記述子は、コマンドへの入力の発信元と、出力およびエラー メッセージの送信先を決定します。この表は、ファイル記述子について説明しています。
ファイル記述子番号 | ファイル記述子の略語 | 定義 |
---|---|---|
0 | 標準入力 | 標準コマンド入力 |
1 | 標準出力 | 標準コマンド出力 |
2 | stderr | 標準コマンド エラー |
コマンドのリダイレクト
デフォルトでは、シェルは標準入力 (キーボード) から入力を受信または読み取り、標準出力 (画面) に出力とエラー メッセージを表示します。入力リダイレクトは、キーボードからではなく、ファイルから入力を読み取るコマンドを強制します。出力リダイレクトは、出力を画面に送信する代わりに、コマンドからの出力をファイルに送信します。
標準入力のリダイレクト
小なり (< ) メタ文字は、キーボードから入力を読み取る代わりに、ファイルを標準入力として処理します。
# command < filename
または
# command 0< filename
たとえば、data.txt ファイルを mailx コマンドの入力として使用します。
# mailx -s test [email protected] < data.txt
標準出力のリダイレクト
大なり (> ) メタ文字は、出力を画面に出力する代わりに、標準出力をファイルに送信します。
# command > filename
または
# command 1> filename
ファイルが存在しない場合は、システムによって作成されます。単一の大なり (>) メタ文字を使用すると、ファイルが既に存在する場合、コマンドはファイルの元の内容を上書きします。 2 つの大なり記号 (>>) を使用すると、コマンドは出力をファイルの元のコンテンツに追加します。
$ command >> filename
標準エラーのリダイレクト
ファイル記述子番号 (2) と大なり記号 (>) を使用するコマンドは、すべての標準エラー メッセージを /dev/null ファイルにリダイレクトします。
$ command 2> /dev/null
次の例は、data.txt ファイルにリダイレクトされた標準出力と標準エラーを示しています。
$ ls /tmp 1> data.txt 2>&1注意 :構文 2>&1 は、stderr (2) を stdout (1) を受け取る同じファイルにリダイレクトするようにシェルに指示します。
パイプのキャラクター
パイプ文字は、あるコマンドの標準出力を別のコマンドの標準入力にリダイレクトします。最初のコマンドは出力を標準出力に書き込み、2 番目のコマンドは前のコマンドの標準出力を標準入力として読み取ります。
$ command | command
たとえば、who コマンドからの標準出力を wc -l コマンドの標準入力として使用します。
$ who | wc -l 35
/etc ディレクトリにあるすべてのサブディレクトリのリストを表示するには、次のコマンドを入力します。
$ ls -F /etc | grep "/" X11/ acct/ apache/ apache2/
head コマンドの出力を「xargs ls」コマンドの入力として使用します。
head -10 data.txt | xargs ls