昨天跟前天已經寫好三個實用的 function,分別是 setAlias
、unsetAlias
跟 expandAlias
,今日目標是要用它們來完成 alias 跟 unalias 的功能~
strings.Trim
Trim
可以用來把頭尾多餘的字元刪掉,譬如說 Trim("'ls -la'", "'")
就可以把 'ls -l'
頭尾的單引號刪掉,得到 ls -l
字串
實作 alias
指令不會很難,但雙引號跟單引號有點多,請大家張大眼睛仔細看 ?
func executeInput(input string) error {
// ...
// 如果使用者輸入 alias 開頭的指令
// 譬如說 alias gst='git status'
// args = ["alias", "gst='git status'"]
if args[0] == "alias" {
// 把 args[1] 切成左右兩邊,變成 key 跟 value
// kv = ["gst", "'git status'"]
kv := strings.Split(args[1], "=")
// 把 value 的單引號去掉取得真正的 value
// key = "gst", val = "git status"
key, val := kv[0], strings.Trim(kv[1], "'")
setAlias(key, val)
// 沒有錯誤發生
return nil
}
// ...
}
unalias 的部分簡單一些,沒有單引號的問題,所以不需要用到 strings.Trim
func executeInput(input string) error {
// ...
// args = ["unalias", "gst"]
if args[0] == "unalias" {
// key = "gst"
key := args[1]
// unsetAlias("gst")
unsetAlias(key)
return nil
}
// ...
}
把使用者輸入的指令展開,直接用昨天寫好的 expandAlias
就可以了
func executeInput(input string) error {
// ...
// 把使用者的輸入根據 alias 進行 expandAlias
// Ex: "gst" -> "git status"
// Ex: "ls -h" -> "ls -l -h"
input = expandAlias(input)
// ...
}
大功告成 ???
git status
是我最常用的指令之一,把它縮寫成 gst
可以大幅提高效率
下了 unalias 之後就找不到 gst
了,因為他已經不在 Alias Table 中
今天寫的扣也滿多的,尤其很多單雙引號那邊真的是看到眼花撩亂,還好最後總算是完成了
對於程式碼有任何問題的話歡迎在下方提問,沒問題的話明天就要來說說 alias 的最後一部分:\command