パイプシェルのttyから読む

パイプシェルのttyから読む

次のように実行されるスクリプトがあります。

カールhttps://example.com/install.shzsh--

スクリプトは使用入力から読み取る必要があります。

read "human_name?Your human name ?"</dev/tty

問題は、ユーザーが入力を見て応答を入力できるが、応答がhuman_nameに保存されないことです。

例:

cat <<EOM | zsh -
read "human_name?Your human name ?"</dev/tty   
if [ -z "$human_name" ] ; then echo "tears" ; else echo "HI" $human_name; fi
EOM

結果:

Your human name ?Pat
tears

どのような指示がありますか?

答え1

/dev/ttyプログラムがバックグラウンド操作でない限り、リダイレクトを介して常に端末から読み取ることができます。バックグラウンドジョブの場合は、フォアグラウンドに切り替えられるまでSIGTTINによって一時停止されます。

スクリプトの問題は、端末で読むのではなく、読んだ内容で何をするのかということです。 here文書を補間と一緒に使用したため、$human_namehere文書が構築されたときに補間が行われ、当時は空でした。実行中のシェルがzsh -ドキュメントを表示および解析できるように、補間または引用符のドル記号なしでここでドキュメントを使用する必要があります。

猫 <<「町田」zsh--
"human_name? あなたの名前は</dev/tty"です。   
if [-z "$human_name"];それ以外の場合は、echo "hi" $human_name;
結論

関連情報