![](/img/trans.png)
[英]How do I run ruby commands in my bash script without getting “ruby: command not found”
[英]How do I make a Ruby script into a bash command?
我有一个Ruby文件,并将其作为ruby file.rb "parameters"
。 我更喜欢将其作为regtask parameters
运行,而不必每次都包含ruby
和文件名。 我希望它与ls
处于同一级别。 我将如何完成?
编辑文件,确保这是第一行,这样您的系统就知道如何执行文件:
#!/usr/bin/env ruby
接下来,更改文件的权限以使其可执行:
chmod a+x file.rb
最后,重命名它并将其移动到将要执行的位置,而无需编写其完整路径:
mkdir -p ~/bin
mv file.rb ~/bin/regtask
(大多数系统会自动将~/bin
添加到PATH
如果存在);如果不存在,则必须自己在启动文件中将其添加到PATH
。)
这应该有帮助。如果您遇到任何问题,请告诉我。
http://commandercoriander.net/blog/2013/02/16/making-a-ruby-script-executable/
使Ruby脚本可执行
这是* nix社区中的常识,但是对于许多新开发人员而言,将Ruby脚本转换为可执行的命令行程序就像魔术一样。 尽管Internet上还有其他参考,但对于此处的帖子,我将简要说明如何从直接调用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
的位置,并且创建日期自然会有所不同,但否则输出将几乎相同。 该行的第一部分是启示性的部分。 字母r
和w
指定读取和写入权限。
我们将添加执行权限,该权限将在该行中显示为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程序(例如ls
, chmod
, mv
等)时,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脚本的绝对路径。 现在,我们完成了,我们可以简单地键入greeter
来调用我们的Ruby脚本!
作为注脚,如果上述Bash命令中的任何一个看起来令人困惑,请尝试通过键入man <command>
查找其手册页。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.