如何在zsh中暂停?

k10*_*107 9 bash zsh

我想为zsh编写这个bash循环

while true; do echo "print something"; read -p "pause"; done
Run Code Online (Sandbox Code Playgroud)

这个循环回声,然后等待用户按回车键.如果我按原样输入,则read语句不会暂停,导致zsh无限地回显"print something"而不等待用户按Enter键.

She*_*ton 11

因为这是我能找到的唯一搜索结果,我发现它有用但仍然有点令人困惑,这是另一种方式:如果你想做的就是回显一行文字并等待用户按下输入... read \?"I am waiting for you to press [Enter] before I continue."


Jer*_*ock 10

看起来-p有点不同zsh.你可能会需要类似的东西read some_variable\?pause.


Rod*_*lho 7

zsh

read -s -k '?Press any key to continue.'
Run Code Online (Sandbox Code Playgroud)

来自man zshbuiltins

  • -s 如果从终端读取,请不要回显字符。
  • -k 仅读取一个字符。
  • name?prompt名称被省略,因此用户输入存储在REPLY变量中(我们将其忽略)。第一个参数包含一个?,因此,当外壳是交互式的时,该单词的其余部分用作标准错误的提示。

在提示后添加换行符:

read -s -k $'?Press any key to continue.\n'
Run Code Online (Sandbox Code Playgroud)

$''下解释QUOTINGman zshmisc

最后,一个pause函数在脚本中接受任意提示消息,该脚本执行OP所要求的操作:

#!/usr/bin/env zsh

pause() read -s -k "?$*"$'\n'

while true; do
    echo "print something"
    pause "pause"
done
Run Code Online (Sandbox Code Playgroud)