为自定义命令前置的所有命令保留Bash完成

时间:2011-04-21 16:04:18

标签: bash bash-completion

我有一个允许在后台执行Bash进程的脚本,我将其称为“backy”。我想在后台运行的程序我这样称呼:

backy long-running-script param1 param2

现在的问题是,如果我添加另一个脚本,我会松开long-running-script的Bash完成。

我想编写一个Bash完成文件,它不仅保留long-running-script的Bash完成及其所有参数,也保留了我想用goy调用的每个其他脚本。

我有一些Bash完成的经验,但我只是错过了我可以插入到我的Bash完成脚本中的命令,以便在完成要调用的脚本时完成。有什么想法吗?

到目前为止我完成了:

have backy &&
_backy_complete()
{
  local cur prev goals

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

  # How to get the completion from the script that is the param for backy, 
  # in a generic way?
  COMPREPLY=( ????? )
  return 0
} &&
complete -F _backy_complete backy

编辑 - 解决方案:

感谢Lekensteyn,我用这一行替换了现有bash完成脚本的内容:

complete -F _command backy

1 个答案:

答案 0 :(得分:4)

对于这种情况,已经存在bash_completion函数:

complete -F _command backy

它用于在sudofakeroot和其他人之后自动填充命令。传递给backy的任何参数都会被忽略,如:

backy --whatever --this --is=ignored not ignored anymore