我想寫這個慶典環路的zsh如何在zsh中暫停?
while true; do echo "print something"; read -p "pause"; done
這個循環回聲,然後等待用戶按Enter鍵。如果我按原樣輸入,則read語句不會暫停,導致zsh無限回顯「打印某些內容」,而無需等待用戶按Enter鍵。
我想寫這個慶典環路的zsh如何在zsh中暫停?
while true; do echo "print something"; read -p "pause"; done
這個循環回聲,然後等待用戶按Enter鍵。如果我按原樣輸入,則read語句不會暫停,導致zsh無限回顯「打印某些內容」,而無需等待用戶按Enter鍵。
它看起來像-p
做一些事情在zsh
不同。您可能需要諸如read some_variable\?pause
之類的東西。
因爲這是他們唯一的搜索結果我能找到的,我發現它有用的,但仍然有點混亂,這裏是把它的另一種方式:如果你想要做的就是呼應一行文本,並等待用戶按下輸入...... read \?"I am waiting for you to press [Enter] before I continue."
#!/bin/zsh
pause()
{
echo "$*"; read -k1 -s
}
現在我們可以調用函數與任何提示文字:
pause "paused! press any key to continue"
pause "you can write anything here :)"
在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 zshmisc
QUOTING
下說明。
最後,pause
功能,在一個腳本,做什麼OP要求接受一個任意的提示信息:使用
#!/usr/bin/env zsh
pause() read -s -k "?$*"$'\n'
while true; do
echo "print something"
pause "pause"
done
'_'不起作用:zsh中拋出一個錯誤'的zsh:只讀變量:_ '。其他任何工程雖然。謝謝你的提示。 – k107 2011-03-07 03:17:08
+1相同的技術在ksh中起作用。 – 2011-03-07 05:08:31