【问题标题】:How do I make a Ruby script into a bash command?如何将 Ruby 脚本制作成 bash 命令?
【发布时间】:2015-01-19 05:44:18
【问题描述】:

我有一个 Ruby 文件,我以ruby file.rb "parameters" 运行它。我更喜欢以regtask parameters 运行它,而不必每次都包含ruby 和文件名。我希望它与ls 处于同一水平。我将如何做到这一点?

【问题讨论】:

  • 您可以重命名文件并删除.rb 扩展名以使文件名更易于键入,但您无法摆脱键入文件名。您仍然需要将其键入为命令名称(而不是 ruby 命令的参数)。

标签: ruby bash shebang


【解决方案1】:

编辑您的文件,确保这是第一行,以便您的系统知道如何执行您的文件:

#!/usr/bin/env ruby

接下来,更改文件的权限以使其可执行:

chmod a+x file.rb

最后,重命名并将其移动到将要执行的位置,而无需编写完整路径:

mkdir -p ~/bin
mv file.rb ~/bin/regtask

(如果PATH 存在,大多数系统会自动将~/bin 添加到PATH;如果不存在,您必须自己在启动文件中将其添加到PATH。)

【讨论】:

  • 如果您使用的是 Windows 编辑器,则需要修复行尾。更好的是,停止使用 Windows 编辑器,或者找到一个可以让您充分控制行尾的编辑器。 Unix 文本文件只有 LF 行结尾,而 Windows 上的标准是 CRLF。
  • 看,这让我很困惑。我可以不只是将它添加到我的 /use/local/bin 而不是在我的主目录中创建一个 bin 并且必须在启动时包含它吗?一种更好的做法吗?我为什么要做主目录?
  • ~/bin 是你的。 /usr/local/bin 适用于所有用户。这两个选项都有效,但它们做的事情不同。
【解决方案2】:

这应该会有所帮助。如果您遇到任何问题,请告诉我。

http://commandercoriander.net/blog/2013/02/16/making-a-ruby-script-executable/

使 Ruby 脚本可执行

这是 *nix 社区的常识,但对于许多新开发人员来说,将 Ruby 脚本转换为可执行的命令行程序就像魔术一样。虽然互联网上还有其他参考资料,但对于此处的帖子,我将简要说明如何从直接调用 Ruby 运行 Ruby 脚本,到仅通过其名称运行脚本。

我们首先假设我们有一个简单的 Ruby 脚本,它在命令行上打印“hello”。我们的脚本名称将是greeter.rb。该文件包含一行 Ruby 代码:

puts "Hello!"`

要运行脚本,我们必须输入ruby greeter.rb。直接输入greeter 并且仍然让脚本运行不是很好吗?是的,会的。

首先,我们需要告诉 Bash 如何处理我们的文件,因为我们不会直接将脚本传递给 Ruby。为此,我们将以下内容添加到脚本的最顶部:

#!/usr/bin/env ruby
puts "Hello!"

第一行是一个 Bash 指令,它通过询问 env 命令指定的当前配置的 Ruby 版本来告诉 Bash 运行我们的文件的程序。有关env 工作原理的更多信息,请尝试在命令行中输入man env

其次,我们需要使我们的脚本可执行,这需要更改文件权限。如果文件权限的概念是新的,请在此处阅读。基本上,文件具有三种类型的权限。它们可以被读取、写入和执行。大多数文件通常开始时只有读取和写入访问权限。由于我们要执行我们的脚本,我们将不得不授予它执行权限。

这样做只是一个简单的 Bash 命令。在命令行上,导航到包含greeter.rb 文件的目录。现在,要检查权限,请运行:

ls -l greeter.rb

输出将如下所示:

-rw-r--r--    1 username  staff   13 Feb 16  21:10 greeter.rb

你自己的用户名会出现在username的位置,创建日期自然会不同,否则输出几乎是一样的。该行的第一部分是相关部分。字母rw 指定读写权限。

我们将添加在该行中显示为 x 的执行权限。要添加执行权限,请运行以下命令。

chmod 755 greeter.rb

现在,如果您再次使用ls -l greeter.rb 检查文件权限,输出应该会有所不同。

-rwxr-xr-x  1 username  staff     13 Feb 16 21:20 greeter.rb

x 的存在表明该文件可以直接运行而无需先调用 Ruby。下面的命令应该让我们的文件说“你好”。

./greeter.rb

差不多了。现在,我们只需要去掉前缀 ./,它告诉 Bash 在哪里寻找 greeter.rb,即在当前目录中。不过,在我们完成最后一步之前,让我们将文件重命名为 greeter

mv greeter.rb greeter

现在,进行最后一步。每次我们调用 Bash 程序时,例如,lschmodmv 等,Bash 都会在预定义的文件夹列表中搜索这些程序。这称为路径。要查看您计算机上的路径设置,请尝试:

echo "$PATH"

输出应该是一长串各种系统关键文件夹。我们需要将我们的应用程序放入这些文件夹之一。传统上,最好保留/usr/bin//bin/ 之类的文件夹。相反,任何类型的用户添加都应该放在/usr/local/bin/ 中。如果该文件夹不存在,请使用以下命令创建它:

mkdir -p /usr/local/bin/

现在,我们可以将欢迎程序移到该文件夹​​中,或者将应用程序留在原处,然后在 /usr/local/bin/ 文件夹中创建一个软链接(或 OS X 术语中的别名)。要创建别名,我们将使用ln 命令。在greeter 所在的目录中,输入:

ln -s $PWD/greeter /usr/local/bin/ 请注意,$PWD 变量将扩展为我们的欢迎脚本的绝对路径。现在,我们完成了,我们可以简单地输入 greeter 来调用我们的 Ruby 脚本!

作为脚注,如果上述任何 Bash 命令看起来令人困惑,请尝试通过键入 man <command> 来查找其手册页。

【讨论】:

  • ln 不会创建别名,它会创建软链接或硬链接,即使在 OS X 上也是如此。您需要在为了制作 Mac OS 别名。
  • 我没有意识到...感谢您的提醒!
猜你喜欢
  • 2014-08-23
  • 2023-03-24
  • 2021-05-02
  • 2013-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-18
  • 1970-01-01
相关资源
最近更新 更多