Bash

如何自定義 bash 自動完成以列出另一個目錄中的文件

  • October 29, 2017

如何自定義 bash 自動完成以僅針對一個腳本選項(-seq)列出另一個目錄中的文件,對於其他腳本選項(-speed,-define)預設自動完成是可以的,這就是我所擁有的

export files=`ls /home/tests/`
echo $files #debug     

_xtest ()   {              
     local cur
     COMPREPLY=()     
     cur=${COMP_WORDS[COMP_CWORD]}
      #case "$cur" in
      COMPREPLY=( $(compgen -W "${files}" -- ${cur}) )
   #  esac
     return 0
   }

   complete -F _xtest -o filenames xtest

如何為其他選項啟用預設 bash 完成?

應該使用 prev 而不是 cur :

_xtest ()   {              
     local prev
     COMPREPLY=()     
     prev=${COMP_WORDS[COMP_CWORD-1]}
     case "$prev" in
      -seq )
         COMPREPLY=( $(compgen -W "${files}" -- ${cur}) ) ;;
     esac
     return 0
   }
complete -F _xtest -o filenames xtest

引用自:https://unix.stackexchange.com/questions/400345