zsh でコマンドを実行するとread -p 'erasing all directories (y/n) ?' ans
エラーが発生します。
read: -p: no coprocess
しかし、bashはプロンプトを印刷します。 zshでこれを行うにはどうすればよいですか?
答え1
引き続き使用できますread
。プロンプトを最初に印刷します。 Inは、使用するプロンプトを表示するのではなく、コプロセスから入力を読み取る必要があることzsh
を示します。-p
POSIX と互換性のある次のことができます。
printf >&2 '%s ' 'erase all directories? (y/n)'
read ans
ksh/zshread 'var?prompt'
または bash と同様に、read -p prompt var
プロンプトはスクリプトの通常の出力を汚染しないように stderr で表示されます。
答え2
それともzsh
もっと似たもの
() {
local compcontext='yn:yes or no:(y n)'
vared -cp 'erasing all directories (y/n) ? ' ans
}
これで回答が完了します。
答え3
以下と同じksh
:
IFS= read -r 'ans?erasing all directories (y/n)? '
また、zsh
はい/いいえ答えがread
あります。-q
if read -q '?erasing all directories (y/n)? '; then
rm -rf -- *(D/)
fi
yesと入力するとtrueが返されるので、を押す必要はありませんEnter。