在bash中自动完成ruby命令

时间:2009-12-17 19:44:33

标签: ruby bash autocomplete

在Bash shell中,我想从任何地方运行ruby脚本目录。将目录添加到$ PATH不会这样做。

我想输入'ruby',开始输入脚本名称的第一个字母,然后按Tab键自动填充脚本名称。

例如,我在/~ / username / foo / bar并想运行/~/ruby/test/script1.rb

  

〜/ username / foo / bar $ ruby​​ scri

按Tab键和

  

/ username / foo / bar $ ruby​​ script1.rb

出现。然后我就可以按Enter键并让脚本运行,即使我不在正确的目录中。

这可能吗?

5 个答案:

答案 0 :(得分:2)

如果将其添加到脚本的顶行。使用'which ruby​​'来找出解释器所在的位置并改为使用该路径。

#!/usr/local/bin/ruby -w

然后使用

将它们更改为可执行文件
chmod +x ruby_script.rb

例如,您可以像普通程序一样使用它们(虽然您可能想要丢失.rb扩展名)

ruby_script.rb

答案 1 :(得分:2)

查看/etc/bash_completion文件和complete命令。谷歌搜索这些关键字应该为您提供一些教程,如如何自定义bash自动完成。

另外,请确保您的ruby脚本具有正确的she-bang线。

答案 2 :(得分:1)

据我所知,你可以做的唯一bash完成就是运行脚本本身。如果您要使脚本可执行并将其放在路径中,您应该能够通过键入

来运行脚本
my_scri

然后点击标签。这可能是最简单的方法。你在用什么操作系统?我们或许可以提供更多帮助。

答案 3 :(得分:1)

我发现this tutorial特别有帮助。基本上你想要达到这条线:

COMPREPLY=( $(compgen -W "${files}" -- ${cur}) )

然后你必须弄清楚如何做的主要是获取/〜/ ruby​​ / test目录中当前目录+文件中的文件列表,并将其分配给files

虽然它有点复杂,因为你必须考虑路径。

答案 4 :(得分:0)

为什么不直接制作ruby可执行文件并在第一行包含解释器,如下所示:

$cat >un.rb<<END
> #!/usr/bin/ruby
> puts "Hi"
> END
$chmod +x un.rb 
$export PATH=$PATH:/Users/oscarreyes
$cd /tmp 
$un.rb 
Hi

我已使用标签自动填充我的命令un.rb