5

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

backy long-running-script param1 param2

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

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

我对 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
4

1 回答 1

4

对于这种情况,已经有一个 bash_completion 函数:

complete -F _command backy

它用于自动完成之后的命令sudofakeroot以及其他。传递给 backy 的任何参数都将被忽略,例如:

backy --whatever --this --is=ignored not ignored anymore
于 2011-08-31T15:14:29.387 回答