2011-03-07 96 views
6

我想写这个庆典环路的zsh如何在zsh中暂停?

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

这个循环回声,然后等待用户按Enter键。如果我按原样输入,则read语句不会暂停,导致zsh无限回显“打印某些内容”,而无需等待用户按Enter键。

回答

10

它看起来像-p做一些事情在zsh不同。您可能需要诸如read some_variable\?pause之类的东西。

+0

'_'不起作用:zsh中抛出一个错误'的zsh:只读变量:_ '。其他任何工程虽然。谢谢你的提示。 – k107 2011-03-07 03:17:08

+0

+1相同的技术在ksh中起作用。 – 2011-03-07 05:08:31

9

因为这是他们唯一的搜索结果我能找到的,我发现它有用的,但仍然有点混乱,这里是把它的另一种方式:如果你想要做的就是呼应一行文本,并等待用户按下输入...... read \?"I am waiting for you to press [Enter] before I continue."

0
#!/bin/zsh 

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

现在我们可以调用函数与任何提示文字:

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

zsh

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

man zshbuiltins

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

要包括提示后一个新行:

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

$''man zshmiscQUOTING下说明。

最后,pause功能,在一个脚本,做什么OP要求接受一个任意的提示信息:使用

#!/usr/bin/env zsh 

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

while true; do 
    echo "print something" 
    pause "pause" 
done