概述:
有時(shí)候會(huì)碰到這樣的場(chǎng)景,在Cygwin或MSYS2環(huán)境下工作,執(zhí)行一個(gè)耗時(shí)較長(zhǎng)的任務(wù)(eg:gcc編譯、rsync同步等等...),我們不想長(zhǎng)時(shí)間保持窗口激活狀態(tài)在前臺(tái)苦等任務(wù)運(yùn)行結(jié)束,窗口切到后臺(tái)后又無法第一時(shí)間獲取任務(wù)完成的狀態(tài)。此時(shí),我們可以在任務(wù)命令后加一個(gè)輸出語句echo -e "\a\c"來輸出一個(gè)響鈴信號(hào),同時(shí)伴隨窗口閃爍,具體響鈴的聲音取決于你mintty個(gè)人的配置和操作系統(tǒng)的有關(guān)設(shè)置。
回顧Echo命令的特殊字符控制用法
可以在終端輸入help echo查看幫助,其中可以看到\a序列就是輸出響鈴效果的控制指令,命令末尾的\c是為了抑制換行(因我們只想要響鈴效果,而無需文本換行);
$ help echo
echo: echo [-neE] [參數(shù) ...]
將參數(shù)寫到標(biāo)準(zhǔn)輸出。
在標(biāo)準(zhǔn)輸出上,顯示用空格分割的 ARG 參數(shù)后跟一個(gè)換行。
選項(xiàng):
-n 不要追加換行
-e 啟用下列反斜杠轉(zhuǎn)義的解釋
-E 顯式地抑制對(duì)于反斜杠轉(zhuǎn)義的解釋
`echo' 對(duì)下列反斜杠字符進(jìn)行轉(zhuǎn)義:
\a 警告(響鈴)
\b 退格
\c 抑制更多的輸出
\e 轉(zhuǎn)義字符
\f 換頁字符
\n 換行
\r 回車
\t 橫向制表符
\v 縱向制表符
\\ 反斜杠
\0nnn 以 NNN (八進(jìn)制)為 ASCII 碼的字符。 NNN 可以是 0 到 3 個(gè)八進(jìn)制位
\xHH 以 HH (十六進(jìn)制)為值的八按位字符。HH可以是一個(gè)或兩個(gè)十六進(jìn)制位
退出狀態(tài):
返回成功除非有寫錯(cuò)誤發(fā)生。
自建函數(shù)numbeep實(shí)現(xiàn)循環(huán)多次響鈴
numbeep() {
#發(fā)出多次蜂鳴聲提示,終端窗口未激活則同時(shí)閃爍窗口(echo -e "\a");
# $1 可傳遞純數(shù)字定義要響鈴(beep)的次數(shù),缺省默認(rèn)為4次;
#原始測(cè)試命令:
# sleep 60;for i in {1..5};do echo -e "\a\c";ping -c 1 -W 1 127.0.0.1 &>/dev/null;done
# 循環(huán)中不使用sleep而使用ping是因?yàn)閟leep耗時(shí)太長(zhǎng),效果不好,完全不延時(shí),則定義多次響鈴實(shí)際只會(huì)響一次 ,達(dá)不到目的 !
# 可在執(zhí)行某個(gè)耗時(shí)任務(wù)的命令后加該函數(shù),任務(wù)執(zhí)行完畢后響鈴即窗口閃爍提示用戶!
# eg:
# sleep 15 && numbeep 5 #簡(jiǎn)單的無用功測(cè)試
# rsync xxxxx;numbeep 5 #無論上一條命令結(jié)果如何均響鈴
# rsync xxxxx && numbeep 5 #僅當(dāng)上一條命令執(zhí)行成功才響鈴
# wget http://xxxxxx && numbeep 5 #同上
#————————————————————————————————————————————————————————————————————————————
local beepCount=4
[ ! -z "$1" ] && expr "$1" + 0 &>/dev/null && local beepCount=$1
for i in `seq 1 $beepCount`
do
echo -e "\a\c"
ping -c 1 -W 1 127.0.0.1 &>/dev/null
done
}
解釋:$1可以傳遞數(shù)字參數(shù)指定要重復(fù)響鈴的次數(shù),默認(rèn)響鈴4次,其中循環(huán)體內(nèi)使用ping命令做一個(gè)看似無效的操作是因?yàn)椴皇褂醚訒r(shí)操作的情況下,響鈴聲疊加到一起,聽不到響鈴多次的效果,使用
sleep 1命令歲有效,但間隔時(shí)間又略微太長(zhǎng),使用ping命令做一次無用功,經(jīng)測(cè)試剛好能達(dá)到適中延時(shí)的效果!
使用效果:

image.png