當我使用iTerm或Hyper之類的終端時,剛啟動時,我收到的第一條消息是:
complete:13:找不到命令:compdef
我不知道這是從哪裡來的,以及如何擺脫它。但是,此消息不會顯示在默認終端應用程序上。
我正在使用zsh。
當我使用iTerm或Hyper之類的終端時,剛啟動時,我收到的第一條消息是:
complete:13:找不到命令:compdef
我不知道這是從哪裡來的,以及如何擺脫它。但是,此消息不會顯示在默認終端應用程序上。
我正在使用zsh。
這是我在Mac OS上遇到的相同問題。我正在使用zsh shell。
Compdef基本上是zsh用來加載自動完成功能的函數。完成系統需要激活。如果您使用的是類似oh-my-zsh的東西,則已經解決了這個問題,否則您需要在〜/ .zshrc
中添加以下內容 自動加載-Uz compinit
compinit
可以直接使用compdef函數手動註冊完成功能,例如compdef。但是在使用compdef之前,需要在上下文中自動加載compinit。
經過更多研究,我找到了答案。我的.zprofile中有一個塊:
export NVM_DIR =“ / Users / Aaron / .nvm”
[-s“ $ NVM_DIR / nvm.sh”] && \。“ $ NVM_DIR / nvm.sh”#這將加載nvm
[-s“ $ NVM_DIR / bash_completion”] && \。“ $ NVM_DIR / bash_completion”
最後一行加載compdef。但是這樣做時會引起某種衝突。我需要做的就是註釋掉:
#[-s“ $ NVM_DIR / bash_completion”] && \。“ $ NVM_DIR / bash_completion”
煩人的錯誤消失了。最好的部分是:我仍然有zsh選項卡補全。
這取決於您為系統,終端,iTerm設置的默認(登錄)shell的內容。安裝並設置為在其中之一中執行的更新的 bash
會產生不同的結果。
此錯誤來自您安裝的所謂的點文件。這些文件的前面有一個點(因此稱為名稱),例如 .bashrc
。這意味著它們對於Finder和簡單的 ls
不可見。
當外殼啟動時,有關的點文件將被您的外殼讀取。它們包含說明,設置,自定義;也許是一些程序代碼片段。
不是您的用戶主目錄中的所有點文件都可以被外殼讀取。
bash讀取的內容可能包括:
.bash_history
.bash_profile
.bash_prompt
.bash_sessions
.bashrc
.editorconfig
.exports
.functions
.inputrc
.profile
(此列表並不詳盡)
這些文件可能是由您創建,由您或由某些程序(如Fink,自製程序或端口)操縱的。 您可能剛剛從網上複製了這些文件,以“升級” /個性化您的shell。
無論您如何看待當前情況。從另一個用戶打開您的終端機/ iTerm,可能不會出現該症狀。
這意味著:所有這些文件在某種意義上都可以“安全刪除”:從某種意義上說,它們對於運行終端機或外殼程序不是必需的。如果這些文件確實包含您可能在日常工作中依賴的個性化設置,請對其進行備份。這樣的示例包括對 $ PATH
變量的添加。沒有這些,您可能會發現像芬克這樣的程序不再起作用。
但是,您發布的實際錯誤消息表明兩件事:
點文件的組合內容無法完成它們應做的工作。更確切地說:一條指令(compdef)被調用,並且不可用。
您很可能從網絡上的源中獲取了許多點文件,例如 holman-dotfiles。 其中包括一個錯誤消息完全相同的錯誤。
因此,您應該瀏覽當前用戶的所有點文件,並僅保留必要時識別的內容(記住備份)。然後,您可以再次使用來源中的更新文件。但是請記住,這些都是“全面的”。最好不要盲目使用它們,而要測試並選擇所有這些選項的子集。
盲目或不加選擇地使用它們不僅可能導致提示該問題的問題,而且還會導致遵循其他方法或故障排除建議時出現的問題。
更新: 該問題的答案是先前版本的,該版本未將zsh指示為所使用的shell。->將zsh替換為您在上面閱讀bash的地方。
我也收到了這個錯誤,但是我有一個不同的解決方案。
我的.zshrc文件具有以下內容:
#設置Kubectl完成
如果[/ usr / local / bin / kubectl];然後來源<(kubectl完成zsh);科幻
#下一行為gcloud啟用Shell命令完成。
如果[-f'/Users/my-user-name/google-cloud-sdk/completion.zsh.inc'];然後 。'/Users/my-user-name/google-cloud-sdk/completion.zsh.inc';科幻
在執行complete.zsh.inc腳本之後,我需要放置kubectl完成部分:
#下一行為gcloud啟用Shell命令完成。
如果[-f'/Users/my-user-name/google-cloud-sdk/completion.zsh.inc'];然後 。'/Users/my-user-name/google-cloud-sdk/completion.zsh.inc';科幻
#設置Kubectl完成
如果[/ usr / local / bin / kubectl];然後來源<(kubectl完成zsh);科幻