Bash自定義函數(shù)numbeep:Cygwin、Mintty窗口重復(fù)響鈴并閃爍以提示新信息

概述:

有時(shí)候會(huì)碰到這樣的場(chǎng)景,在CygwinMSYS2環(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
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Windows CMD命令大全 命令簡(jiǎn)介 cmd是command的縮寫.即命令行 。 雖然隨著計(jì)算機(jī)產(chǎn)業(yè)的發(fā)展,W...
    獨(dú)行小生閱讀 708評(píng)論 0 5
  • 命令簡(jiǎn)介 cmd是command的縮寫.即命令行 。 雖然隨著計(jì)算機(jī)產(chǎn)業(yè)的發(fā)展,Windows 操作系統(tǒng)的應(yīng)用越來...
    灰猩猩閱讀 6,029評(píng)論 0 5
  • 命令簡(jiǎn)介 cmd是command的縮寫.即命令行 。 雖然隨著計(jì)算機(jī)產(chǎn)業(yè)的發(fā)展,Windows 操作系統(tǒng)的應(yīng)用越來...
    wp2001閱讀 223評(píng)論 0 0
  • 部分內(nèi)容轉(zhuǎn)載自搜狗百科 cmd是command的縮寫.即命令提示符(CMD),是在OS / 2 , Windows...
    青冥之上閱讀 2,500評(píng)論 0 24
  • 一、命令行 1. calc-----------啟動(dòng)計(jì)算器 2.certmgr.msc----證書管理實(shí)用程序 3...
    小小辛_c閱讀 774評(píng)論 0 2

友情鏈接更多精彩內(nèi)容