2011-03-07 93 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