Bash劫持cd命令專用函數(shù)_hook-cd,提供交互式選擇快速切換到子目錄

Bash劫持cd命令專用函數(shù),提供交互式選擇輸入序號(hào)即可快速cd切換到子目錄

使用方法:

將以下函數(shù)代碼加入個(gè)人配置文件(~/.bash_profile~/.bashrc)即可,輸入cd命令直接回車,即出現(xiàn)子目錄選擇列表,輸入序號(hào)即可cd到對(duì)應(yīng)的子目錄;
經(jīng)測(cè)試,Cygwin和Linux服務(wù)器均可使用;

使用場(chǎng)景:用手機(jī)終端軟件(如JuiceSSH、ConnectBot等)連接SSH遠(yuǎn)程服務(wù)器時(shí),不方便鍵入中文或無法輸入中文的情況下極為有用;

Shell源代碼

_hook-cd() {
    #劫持cd命令,方便在手機(jī)終端不方便打漢字的情況下切換目錄
    [ $# -gt 0 ] && \cd "$@" && return
    [[ "$-" != *i* ]] && \cd "$@" && return  #非交互式會(huì)話操作直接返回
    [ -z "$SSH_TTY" ] && \cd "$@" && return  #如果是本地終端窗口,不是SSH遠(yuǎn)程會(huì)話連接,則不做任何修改
    #echo "創(chuàng)建交互式選擇列表..."
    print_color 40 "請(qǐng)選擇要切換到的子目錄..."
    local subDirs=$(\ls -F|grep '/$'|tr '\t' '\n')
    local toDir
    echo "$subDirs"|awk '{print NR" ):"$0}'
    while :;
    do
        read -p "請(qǐng)輸入序號(hào)選擇要切換到的目錄(輸入 0 或 q 退出操作):" toDir
        if [[ "${toDir,,}" == "0" || "${toDir,,}" == "q" ]];then
            print_color 40 "退出操作..."
            return
        elif [ -z "$toDir" ];then
            print_color 40 "選擇為空,退出操作..."
            return
        else
            #echo "你選擇了 $toDir..."
            toDir=$(echo "$subDirs"|awk 'NR=='"$toDir"'{print $0;exit}' 2>/dev/null)
            [ ! -z "$toDir" ] && break
            print_color 40 "選擇無效,請(qǐng)重新選擇...."
        fi
    done
    echo "切換到目錄 $toDir ..."
    #---------------------------------------
    #_T="`realpath $toDir`" ASMyBash=true exec bash --login -i   # <--- 此行會(huì)fork一個(gè)子進(jìn)程以取代當(dāng)前進(jìn)程~作用與cd xxx相同,但會(huì)產(chǎn)生額外內(nèi)存開銷,可用于應(yīng)對(duì)其他復(fù)雜情況
    #---------------------------------------
    \cd "$toDir"
}
[ ! -z "$SSH_TTY" ] && alias cd='_hook-cd' #只有在遠(yuǎn)程終端連接的情況下才劫持cd命令

運(yùn)行截圖:

718c715ebe53a0b841a308fc4657df54_176373-20221209163258607-1805682514.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)容

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