带有bash可编程完成的条件尾随空间

前端之家收集整理的这篇文章主要介绍了带有bash可编程完成的条件尾随空间前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在创建一个函数来为我使用的命令提供可编程完成(在 http://www.debian-administration.org/articles/317的帮助下). shell脚本用法如下:
  1. script.sh command [command options]

其中command可以是’foo’或’bar’,’foo’的命令选项是’a_foo = value’和’b_foo = value’,’bar’的命令选项是’a_bar = value’和’b_bar = value’ .

这是我正在使用的配置:

  1. _script() {
  2. local cur command all_commands
  3. COMPREPLY=()
  4. cur="${COMP_WORDS[COMP_CWORD]}"
  5. command="${COMP_WORDS[1]}"
  6. all_commands="foo bar"
  7. case "${command}" in
  8. foo)
  9. COMPREPLY=( $(compgen -W "--a_foo --b_foo" -- ${cur}) ); return 0;;
  10. bar)
  11. COMPREPLY=( $(compgen -W "--a_bar --b_bar" -- ${cur}) ); return 0;;
  12. *) ;;
  13. esac
  14. COMPREPLY=( $(compgen -W "${all_commands}" -- ${cur}) )
  15. return 0
  16. }
  17.  
  18. complete -F _script script.sh

这主要是按照我的意愿行事:

  1. % script.sh f[TAB]

完成:

  1. % script.sh foo

(根据需要设有尾随空格)

但是,这个:

  1. % script.sh foo a[TAB]

完成:

  1. % script.sh foo a_foo

(也有尾随空格)

我想用’=’替换尾随空格.或者,我愿意将传递给compgen的值更改为“–a_foo = –b_foo =”,在这种情况下,我可以删除尾随空格.

不幸的是,该命令不在我的控制之下,因此我无法将命令行选项更改为格式为“–a_foo value”而不是“–a_foo = value”.

首先,您需要将=添加到COMPREPLY:
  1. COMPREPLY=( $(compgen -W "--a_foo= --b_foo=" -- ${cur}) )

接下来你需要告诉完成不要在=之后添加空格

  1. compopt -o nospace

所以,你的脚本行应该是:

  1. foo)
  2. COMPREPLY=( $(compgen -W "--a_foo= --b_foo=" -- ${cur}) ); compopt -o nospace; return 0;;
  3. bar)
  4. COMPREPLY=( $(compgen -W "--a_bar= --b_bar=" -- ${cur}) ); compopt -o nospace; return 0;;

猜你在找的Bash相关文章