zshの読み取りコマンドでエラーが発生しました。

zshの読み取りコマンドでエラーが発生しました。

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

関連情報