我有一个Ruby文件,我将其作为ruby file.rb "parameters"
运行。我更喜欢将其作为regtask parameters
运行,而不必每次都包含ruby
和文件名。我希望它与ls
处于同一水平。我该如何做到这一点?
答案 0 :(得分:12)
编辑您的文件,确保这是第一行,以便系统知道如何执行您的文件:
#!/usr/bin/env ruby
接下来,更改文件的权限以使其可执行:
chmod a+x file.rb
最后,将其重命名并将其移动到将要执行的位置,而不必编写完整路径:
mkdir -p ~/bin
mv file.rb ~/bin/regtask
(如果存在,大多数系统会自动将~/bin
添加到PATH
;如果不存在,则必须在启动文件中自行添加PATH
。)
答案 1 :(得分: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
的位置,创建日期自然会有所不同,但输出几乎相同。该系列的第一部分是重要部分。字母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/
现在,我们可以将我们的greeter移动到该文件夹中,或者将应用程序保留在原来的位置,只需在/usr/local/bin/
文件夹中创建一个软链接(或OS X术语中的别名)。要创建别名,我们将使用ln
命令。从greeter
所在的目录中,键入:
ln -s $PWD/greeter /usr/local/bin/
请注意,$PWD
变量将扩展为我们的greeter脚本的绝对路径。现在,我们已经完成了,我们只需键入greeter
即可调用我们的Ruby脚本!
作为脚注,如果上述任何Bash命令看起来令人困惑,请尝试通过键入man <command>
来查找其手册页。