Bash自动完成脚本,它被源代码发送到当前shell

时间:2016-03-08 22:49:03

标签: bash shell bash-completion

我必须在一组相对较少的顶级目录中更改许多子目录。我想让我的生活更轻松,所以我决定看看我是否可以编写一些东西。所以我写了这个脚本chdirp

if [ $# -ne 1 ]; then
   echo "USAGE: chdirp direc"
   exit 1
fi
cd /some/top/level/directory/$1

现在,由于整个子shell相关的事情,我有义务按如下方式执行此脚本,以实际更改当前的工作目录:

>>> . chdirp somewhere

到目前为止一切顺利。现在,我想让我的生活更轻松一点,并让脚本为我提供可能的子目录的选项卡完成。所以我在互联网上找到了一个完整的脚本并得到了这个:

_codeComplete() { 
   local cur=${COMP_WORDS[COMP_CWORD]}
   COMPREPLY=( $(compgen -W "$(/bin/ls /some/top/level/directory/)" -- $cur)) 
}

然后我将完成功能分配给我的脚本。问题是虽然在执行>>> chdirp TAB时标签完成按预期工作但它不适用于>>> . chdirp TAB

我真的想结合使用tab完成子目录列表和快速更改子目录的好处。有什么建议我如何解决我目前的问题?

1 个答案:

答案 0 :(得分:1)

我建议您将其作为函数放入.bashrc,而不是将代码放入独立的脚本中。这样,你就不需要了。 your_command xxx",你只是" your_command xxx"。

此外,虽然它不完全是您原始问题的答案,但我还是想推荐一篇博文。我认为你实际上正在寻找一种方法来标记多个目录。我碰巧这样做是为了让我的生活更轻松。您可以在http://lgfang.github.io/images/bash-dir-bookmark.png查看相应的bash函数https://github.com/lgfang/dotfiles/blob/master/.bashrc

事实上,我在更改目录之间做了很多工作,这让它变得非常简单。有关详细信息,请访问http://lgfang.github.io/computer/2015/12/18/bash-convenience

相关问题