Bash
bash 自動完成功能不起作用,無法“完成”
我的
bashrc.
我有一個 bash 完成的命令,scp
實現如下function _scp_complete { COMPREPLY="" COMPREPLY+=( $(cat ~/.ssh_complete ) ) COMPREPLY+=( $( find . ! -name . -prune -type f ) ) } complete -F _scp_complete scp
這個想法是,當按下時,
scp [tab]
我會看到目前目錄中的所有文件以及文本文件中列出的單詞~/.ssh_complete
。假設此文件包含以下條目:alex@192.0.0.1 alex@192.0.0.2
所需的行為如下:我鍵入
scp alex@ [tab]
並製表符完成“完成”命令scp alex@192.0.0.
自動,因為只有兩個可能的參數以開頭alex@
(假設沒有與目前工作目錄中的文件名稱相似的文件。)。我在目前實現中得到的行為如下:我鍵入
scp alex@ [tab]
並且製表符完成沒有完成任何事情,但在命令下方列出了每個可能的參數。如何獲得所需的行為?
這對我有用:
_foo() { local cur COMPREPLY=() cur=${COMP_WORDS[COMP_CWORD]} opts="" while read line do opts+=" $line" done < ~/.ssh_complete opts+=" " opts+=$(find . ! -name . -prune -type f) case "$cur" in *) COMPREPLY=( $( compgen -W '$opts' -- $cur ) );; esac return 0 } complete -F _foo scp