📥
標準入力を受け入れるシェルスクリプトの書き方
結論
while read
cat -
主に上記の方法がある
while read
#!/bin/bash
while read line
do
echo $line
done
伝統的な手法。
逐次処理できるので、行をまたいだ処理を実装することに適しているように思う。
cat -
#!/bin/bash
cat - | cut -d',' -f1-3 | column -ts,
標準入力から入力を受け取る手段がすでにあるのだから、cat -
でよい、という方法。
シンプルで、読み取る時間的コストも安い。
(上記の方法だと別に cat -
さえも要らない…)
参考URL
-
入力と出力 | UNIX & Linux コマンド・シェルスクリプト リファレンス
- 伝統的な while read 構文
-
USP友の会:シェルスクリプトでの標準入力の読み方
-
/dev/stdin
から与えよ - awk の例だと、標準入力のリダイレクトで与えている
- 筆者の言うメリット
- bashの変数に一行一行読み込むのは時間計算量の点で高コスト
- 行を変数に入れてしまうとその後コマンドでバッチ処理が行いにくくなる
- よくわからない
- バッチ処理が示すものがなにか
- 別に
/dev/stdin
を使うことに比べて体裁がよいわけではない
-
-
標準入力を受け取れるシェルスクリプト、関数の作成(パイプで繋げられるようにする) - Qiita
-
[ -p /dev/stdin ]
でパイプ向けとそれ以外の振る舞いを変える- 引数も標準入力に変換している
-
cat -
派
-
-
UNIX哲学 - Wikipedia
- フィルタとして振る舞うようにせよ
- 標準入出力を使え
- フィルタとして振る舞うようにせよ
-
/dev/stderr(/dev/std{in,out}も)は使うべきではない - Qiita
-
/dev/std{in,out,err}
を明記して使うなという話 - file descripter を使えという話
-
- シェルスクリプトでパイプを判断する - Qiita
Discussion