Human: 我在 linux 下寫了某個 shell scrip,我使用
```
ARGS=`getopt -o p --long prod,fe,skip-build,migration,project:,corp: -- "$@"`
```
來限制我的參數
當我在 ubuntu 下透過 /shell/zsh 作為 shell 時,我會在 cli 輸入
```
./deploy.sh --project crm --corp skymirror
```
但我不想要每次都打完 skymirror 這個單字,請問我該如何設計才能在打完
```
./deploy.sh --project crm --corp sk
```
時按下 TAB,便自動完成
```
./deploy.sh --project crm --corp skymirror
```
ChatGPT:
您可以在 shell 設定中啟用自動補全功能來解決這個問題。這樣,當您輸入部分內容時,按下 TAB 鍵時,shell 會自動為您完成命令或參數。
對於 Zsh,您可以添加以下行到您的 ~/.zshrc 檔案中啟用自動補全功能:
bashautoload -U compinit
compinit
完成後,重新載入 shell 設定:
bashsource ~/.zshrc
接著,您可以使用 zsh 的自動補全功能來為 deploy.sh 的 --corp 選項設定預設值。在您打出命令時,只需輸入部分內容,然後按下 TAB 鍵即可自動完成。以下是一個可能的解決方案:
bash# 在 deploy.sh 中添加以下代碼
_deploy() {
local cur
cur=${COMP_WORDS[COMP_CWORD]}
if [[ "$cur" == "sk" ]]; then
COMPREPLY=( $(compgen -W "skymirror" -- $cur) )
fi
}
complete -F _deploy deploy.sh
這段代碼將為 deploy.sh 添加一個自動補全函數,當您輸入 --corp sk 並按下 TAB 時,它將自動補全為 --corp skymirror。
完成後,重新載入 shell 設定:
bashsource ~/.zshrc
現在,當您輸入以下命令時:
css./deploy.sh --project crm --corp sk<TAB>
它應該會自動完成為:
css./deploy.sh --project crm --corp skymirror
請注意,這個解決方案假設您只有一個可能的預設值,即 skymirror。如果您有多個可能的值,則需要修改 _deploy 函數來處理它們。
Add a comment