ふとした思いつきで、シェルスクリプトでちょっとしたツールを作ろうかと思ったのだけど、標準入力をパイプから受け付けると同時にキーボードからの入力を受け付ける方法がわからなかったので調べてみた。 そもそも、パイプから受け付けている場合にキー入力を受け付けるには仮想端末が必要になるので、以下のように記述してreadする必要があるようだ。
read ... </dev/tty
動くサンプルだとこんな感じかな。
#!/bin/bash
# stdinからデータを取得
DATA="$(</dev/stdin)"
echo "$DATA"
# キーボードからの入力を取得
read INPUT_KEY </dev/tty
echo "${INPUT_KEY}"