如何在zsh中暂停?

时间:2011-03-07 02:54:32

标签: bash zsh

我想为zsh编写这个bash循环

while true; do echo "print something"; read -p "pause"; done

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

5 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:10)

看起来-pzsh中做了不同的事情。您可能需要read some_variable\?pause

之类的内容

答案 2 :(得分:4)

zsh

read -s -k '?Press any key to continue.'

来自man zshbuiltins

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

在提示符后包含换行符:

read -s -k $'?Press any key to continue.\n'
{p> $''QUOTING的{​​{1}}下进行了解释。

最后,一个man zshmisc函数在一个执行OP要求的脚本中接受任意提示消息:

pause

答案 3 :(得分:1)

如果您想要一种既能在bashzsh中工作的方式,又能确保往返于终端的I / O:

# Prompt for a keypress to continue. Customise prompt with $*
function pause {
  >/dev/tty printf '%s' "${*:-Press any key to continue... }"
  [[ $ZSH_VERSION ]] && read -krs  # Use -u0 to read from STDIN
  [[ $BASH_VERSION ]] && </dev/tty read -rsn1
  printf '\n'
}
export_function pause

答案 4 :(得分:0)

#!/bin/zsh

pause()
{
    echo "$*"; read -k1 -s
}

现在我们可以使用任何提示文本调用该函数:

pause "paused! press any key to continue"
pause "you can write anything here :)"