我想为zsh编写这个bash循环
while true; do echo "print something"; read -p "pause"; done
此循环回声,然后等待用户按回车键。如果我按原样输入,则read语句不会暂停,导致zsh无限地回显“print something”而不等待用户按Enter键。
答案 0 :(得分:11)
因为这是我能找到的唯一搜索结果,我发现它有用但仍然有点令人困惑,这是另一种方式:如果你想做的只是回显一行文字并等待用户按下输入...
read \?"I am waiting for you to press [Enter] before I continue."
答案 1 :(得分:10)
看起来-p
在zsh
中做了不同的事情。您可能需要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)
如果您想要一种既能在bash
和zsh
中工作的方式,又能确保往返于终端的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 :)"