[Shell] 入力・出力を制御する

`2>&1` あたり。

## シェルスクリプト作成時の扱い

> [入力と出力 – UNIX & Linux コマンド・シェルスクリプト リファレンス](http://shellscript.sunone.me/input_output.html)
>
> * シェルスクリプトを作成する場合は、通常メッセージは標準出力へ、エラーメッセージは標準エラー出力へ、というようにメッセージの出力先を振り分けることが望ましい。

## 出力リダイレクション

* `>`[上書き] `>>`[追記](出力リダイレクション)

こちらで紹介されているサンプルは、それぞれ以下のように振る舞う。

> [Windowsユーザーに教えるLinuxの常識(8):bashで始めるシェルスクリプト基礎の基礎 (1/2) – @IT](http://www.atmarkit.co.jp/ait/articles/0202/05/news001.html)

標準出力は、リダイレクトして log.txt に出力される。

“`bash
% ./sysbackup.sh >log.txt
“`

標準出力は、リダイレクトして log.txt に出力される。
標準エラー出力(2)は、リダイレクトして err.txt に出力される。

“`bash
% ./sysbackup.sh >log.txt 2>err.txt
“`

標準出力は、リダイレクトして log.txt に出力される。
標準エラー出力(2)は、標準出力(1)に丸め込んで出力される。

“`bash
% ./sysbackup.sh >log.txt 2>&1
“`

> [[Bash]標準出力・標準エラー出力の全て(1>&2とか)まとめ | Memorandum blog](http://to-developer.com/blog/?p=1001)
>
> * 「`x>&y`」は「x の出力先を y の出力先と同じものに設定する」が正しい

## 入力リダイレクション

* `<`(入力リダイレクション) ファイルの内容を入力する。 ```bash % wc -l [入力と出力 – UNIX & Linux コマンド・シェルスクリプト リファレンス](http://shellscript.sunone.me/input_output.html#io-4)
>
> * 「`<`」はコマンドへのリダイレクションではなく、 ファイルディスクリプタ 0番へのリダイレクションである。 ## パイプ * `|`(パイプ、接続) コマンドの実行結果を他のコマンドに引き渡す。 ```bash % ls |wc -l ``` > [入力と出力 – UNIX & Linux コマンド・シェルスクリプト リファレンス](http://shellscript.sunone.me/input_output.html#io-4)
>
> リダイレクションとパイプは次のように使い分ける。
>
> * データを渡す対象がファイルである場合はリダイレクションを使用する。
> * データを渡す対象がコマンドである場合はパイプを使用する。

## ヒアドキュメント

* `<<`(ヒアドキュメント) 目印(`_EOT_`)までをコマンドへの標準入力として扱う。 ヒアドキュメント中では、コマンド置換や変数も利用できる。 ```bash #!/bin/sh cat <<_EOT_
:

_EOT_
“`

## 標準入力・標準出力する

* `read`(標準入力)
* `echo`(標準出力)

“`bash
% read DATA
hogehoge
% echo $DATA
hogehoge
“`

## 補遺

過去にこのあたりで触れていた。

> * [Crontab: スクリプトを定期的に実行しログを残す | deadwood](https://www.d-wood.com/blog/2013/09/16_4644.html)
> * [Vagrant: ドットインストールの開発環境構築レッスンをベースにWordPress環境をProvisioningしてみた | deadwood](https://www.d-wood.com/blog/2013/09/26_4711.html)
[/markdown]