使用 ls 完成 bash

使用 ls 完成 bash

这在 shell 中有效:

 export files=`ls /home/tests/`
 complete -o filenames -W "${files}" xtest

该脚本不:

 _xtest ()   {                .
      local cur
      local files=`ls /home/tests`
      COMPREPLY=()     cur=${COMP_WORDS[COMP_CWORD]}

      #case "$cur" in

        COMPREPLY=( $(compgen -W "${files}" -- ${cur}) )
    #  esac
      return 0
    }

    complete -F _xtest -o filenames xtest

如何使用脚本从目录的文件列表中自动完成?我使用脚本是因为只有 1 个脚本选项 (-test) 才需要此自定义自动完成,对于其他脚本选项 (-speed、-define),默认自动完成即可

答案1

在一行中声明一个变量并对其进行赋值可以掩盖返回值。最好使用$(..)而不是传统的反引号。鉴于您的代码片段缺乏上下文,以下代码是我在无法测试的情况下能做的最好的代码。

 _xtest ()   {
      local cur
      local files
      files=$(ls /home/tests)
      COMPREPLY=()
      cur=${COMP_WORDS[COMP_CWORD]}

      case "$cur" in
      -*)
      COMPREPLY=( $( compgen -W $files --$cur ) );;
      esac
      return 0
    }

    complete -F _xtest -o filenames xtest

相关内容