Я изучаю завершение bash. Я могу перечислить содержимое только текущего каталога. Вот мой код:
_foo()
{
local cur prev opts
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="push pull"
OUTPUT=" $(ls) "
case "${prev}" in
push)
COMPREPLY=( $(compgen -W "--in --out" -- ${cur}) )
return 0
;;
--in)
COMPREPLY=( $(compgen -W "$OUTPUT" -- ${cur}) )
return 0
;;
esac
COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
return 0
}
complete -F _foo foo
Его вывод:
$ foo push --in[TAB]
file1.txt file2.txt foo ;; content of pwd
Но когда я делаю это:
$ foo push --in ~[TAB]
Это не работает. Итак, я хочу знать, как выполнить завершение bash в другом каталоге (не только в pwd)? Спасибо.