iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 15
1

前言

今天是 alias 的最後一天,前兩天都寫了超多程式碼,今天的內容來點比較輕鬆的

不知道各位有沒有過這種困擾:如果我先把 ls 設定成 ls -l 的別名了,每次下 ls 時 Shell 都會幫我跑 ls -l,那當我需要真正的 ls 時該怎麼辦?

\command

這時候只要用 \ls 就可以了,在 ls 前面加個 反斜線 \ 代表要使用原始的那個 ls,如下圖第一個 ls 其實是 ls -l\ls 才是最原本的那個 ls

實作

程式流程

反斜線開頭的指令

如果使用者輸入反斜線 \ 開頭的指令譬如說 \ls,那就不要跑昨天寫好的 expandAlias,而是把開頭的反斜線去掉並執行 ls

反斜線開頭的指令

如果不是 \ 開頭的字串譬如說 ls -h,那就要跑進 expandAlias 裡面做替換變成 ls -l -h,接著再執行

func executeInput(input string) error {
    // ...

    if strings.HasPrefix(input, `\`) {
        // 如果指令是 \ 開頭,那就把第一個字元去掉
        // \ls -> ls
        input = input[1:]
    } else {
        // 如果不是 \ 開頭,那就還是跑 expandAlias 
        input = expandAlias(input)
    }
    
    // ...
    // execute command
}

Demo

可以看出 ls 是 alias 過後的 ls -l,而 \ls 則是原本的 ls

小結

View commit on Github

總算是完成 alias 部分的最後一天,這幾天我辛苦了大家也辛苦了,明天要實作的是用來尋找指令位置的 which,大家可以期待一下

延伸閱讀


上一篇
Day14-alias 指令別名(三)
下一篇
Day16-which 指令在哪兒
系列文
Gosh!原來用 Go 寫一個 Unix Shell 這麼簡單30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言