2

我想启用 bash tab-complete 来查找目录,但不在当前目录中。

例如,如果我这样做:

$ ls $P
dirs/ are/ here/
$ cd /not/the/P/path
$ ls
other/ stuff/
$ myProg <tab>
dirs/ are/ here

这改变了通常的行为,我通常会在当前目录中看到文件。

尽职调查:我能想到的最好的办法是:

_myProg ()
{
  local cur

  COMPREPLY=()
  cur=${COMP_WORDS[COMP_CWORD]}

  if [ "${P}x" = "x" ]; then
    return 1
  fi

  case "$cur" in
    *)
      pth=${P}/$( echo $cur | egrep -o "^.*/[^/]*$" )
      COMPREPLY=( $( compgen -W "$( cd $pth && ls -1d "$cur"* 2>/dev/null -- "$cur" )" ) )
      ;;
  esac

  return 0
}
complete -o nospace -F _myProg myProg

它最初显示目录,但不允许我深入了解我想要的目录(如ls作品)。

4

2 回答 2

0
_myProg()
{
    COMPREPLY=($(cd $P; compgen -f $2))
}
complete -onospace -F_myProg myProg
于 2013-11-20T12:24:09.557 回答
0

对你有$CDPATH帮助吗?请参阅高级 Bash 脚本指南

于 2012-09-21T16:10:24.580 回答