シェルスクリプトでパイプからの標準入力とキー入力を別々に受け付ける
Pocket

ふとした思いつきで、シェルスクリプトでちょっとしたツールを作ろうかと思ったのだけど、標準入力をパイプから受け付けると同時にキーボードからの入力を受け付ける方法がわからなかったので調べてみた。
そもそも、パイプから受け付けている場合にキー入力を受け付けるには仮想端末が必要になるので、以下のように記述してreadする必要があるようだ。

read ... </dev/tty
Sponsored Links

動くサンプルだとこんな感じかな。

#!/bin/bash

# stdinからデータを取得
DATA="$(</dev/stdin)"
echo "$DATA"

# キーボードからの入力を取得
read INPUT_KEY </dev/tty
echo "${INPUT_KEY}"

 

Pocket

Written by blacknon

インフラエンジニア(…のつもり)。 仕事で使うならクライアントはWindowsよりはUNIXの方が好き。 大体いつも眠い。

Leave a Comment

メールアドレスが公開されることはありません。

*