プロンプトを出す。
ユーザに何か入力してもらうためにプロンプトを出したい。
プロンプトは出力に混じらないように標準エラー出力に出す。
$ cat sample ... echo "Are you sure? " >&2 read ask case $ask in [Yy]) ... ;; ... $ ./sample Are you sure? _
echo にそのままプロンプト文字列を渡すと、プロンプトなのに改行されてしまう。
改行の抑止
- BSD 系
- -n オプションを使う。
echo -n "Are you sure? " - SystemV 系
- \c を表示する。
echo "Are you sure? \c"
どっちでも行けるようにするには、echo 自身にどっちの方法が使えるのか聞いてみればいい。
$ cat sample ... if [ x`echo -n` = x ]; then ECHO_N='-n' else ECHO_C='\c' fi echo $ECHO_N "Are you sure? $ECHO_C" >&2 read ask case $ask in [Yy]) ... ;; ... $ ./sample Are you sure? _
-n オプションの使えない echo なら、echo -n すると -n と出力される。
相手の確認
入力してくれる相手が人でない場合に、いちいちプロンプトを出しても仕方ない。*1
相手が端末でなければプロンプトを出さない。
... [ -t 0 ] && echo $ECHO_N "Are you sure? $ECHO_C" >&2 read ask ...
まとめ
- プロンプトは標準エラー出力に出す。
- echo で改行しない方法には方言がある。
- 相手は端末でなければプロンプトを出さない。
*1:そうとも言いきれないが ……