【问题标题】:Autocomplete for the ruby command in bashbash 中 ruby​​ 命令的自动完成
【发布时间】:2025-12-13 20:05:03
【问题描述】:

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

我想输入“ruby”,开始输入脚本名称的第一个字母,然后按 Tab 键自动完成脚本名称。

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

~/用户名/foo/bar $ ruby​​ scri

按 Tab 和

/用户名/foo/bar $ ruby​​ script1.rb

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

这可能吗?

【问题讨论】:

  • 你说:...回车,脚本运行...我现在很困惑,它是否有效?
  • 我希望能够点击选项卡自动完成,然后按回车键运行脚本。
  • 感谢大家的所有回答。如果我可以将多个答案标记为已接受的答案,我会的。

标签: ruby bash autocomplete


【解决方案1】:

如果您将此添加到脚本的第一行。使用 'which ruby​​' 找出您的解释器所在的位置,然后改用该路径。

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

然后将它们更改为可执行

chmod +x ruby_script.rb

例如,您将能够像任何普通程序一样对它们进行 ruby​​(尽管您可能希望丢失 .rb 扩展名)

ruby_script.rb

【讨论】:

    【解决方案2】:

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

    还要确保您的 ruby​​ 脚本有正确的 she-bang 行。

    【讨论】:

      【解决方案3】:

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

      my_scri
      

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

      【讨论】:

        【解决方案4】:

        我发现this tutorial 尤其有用。基本上你想到达这条线:

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

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

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

        【讨论】:

          【解决方案5】:

          为什么不让你的 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
          

          我已经使用 tab 自动完成我的命令 un.rb

          【讨论】: