次のように実行されるスクリプトがあります。
カール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_name
here文書が構築されたときに補間が行われ、当時は空でした。実行中のシェルがzsh -
ドキュメントを表示および解析できるように、補間または引用符のドル記号なしでここでドキュメントを使用する必要があります。
猫 <<「町田」zsh-- "human_name? あなたの名前は</dev/tty"です。 if [-z "$human_name"];それ以外の場合は、echo "hi" $human_name; 結論