Dir['*.rb'] #basic globs
Dir['**/*.rb'] #** == any depth of directory, including current dir.
#=> array of relative names
File.expand_path('~/file.txt') #=> "/User/mat/file.txt"
File.dirname('dir/file.txt') #=> 'dir'
File.basename('dir/file.txt') #=> 'file.txt'
File.join('a', 'bunch', 'of', 'strings') #=> 'a/bunch/of/strings'
__FILE__ #=> the name of the current file
#!/usr/bin/env ruby
module ShellHelper
def test(command)
`#{command} 2> /dev/null`
$?.success?
end
def execute(command, raise_on_error = true)
result = `#{command}`
raise "execute command failed\n" if (not $?.success?) and raise_on_error
return $?.success?
end
def print_exit(message)
print "#{message}\n"
exit
end
module_function :execute, :print_exit, :test
end
使用帮助程序,ruby脚本可能是bash相似的:
#!/usr/bin/env ruby
require './shell_helper'
include ShellHelper
print_exit "config already exists" if test "ls config"
things.each do |thing|
next if not test "ls #{thing}/config"
execute "cp -fr #{thing}/config_template config/#{thing}"
end
13 回答
将它放在script.rb的开头
然后将其标记为可执行:
这可能也会有所帮助:http://rush.heroku.com/
我没有用太多,但看起来很酷
从网站:
假设你写了
script.rb
脚本 . 放:作为第一行并做
chmod +x script.rb
去给自己一份Everyday Scripting with Ruby . 它有很多关于如何做你想要做的事情的有用提示 .
在ruby中,常量
__FILE__
将始终为您提供正在运行的脚本的路径 .在Linux上,
/usr/bin/env
是你的朋友:在Windows上,它取决于.rb文件是否与ruby相关联 . 如果它们是:
如果不是,你必须在它们上显式调用ruby,我使用一个中间的.cmd文件:
my_script.cmd:
my_script.rb:
webmat的答案是完美的 . 我只想指出你的补充 . 如果必须为脚本处理命令行参数很多,则应使用optparse . 它很简单,可以帮助您 .
以下是其他答案中缺少的重要内容:命令行参数通过ARGV(全局)数组公开给您的Ruby shell脚本 .
所以,如果你有一个名为my_shell_script的脚本:
...让它可执行(正如其他人提到的):
并称之为:
你会得到这个:
这些参数适用于文件名扩展:
其中大部分仅适用于UNIX(Linux,Mac OS X),但您可以在Windows中执行类似(虽然不太方便)的操作 .
当您想编写更复杂的ruby脚本时,这些工具可能有所帮助:
例如:
thor(脚本框架)
gli(git like interface)
methadone(用于创建简单工具)
它们让您快速开始编写自己的脚本,尤其是“命令行应用程序” .
默认情况下,您已经可以访问Dir和File,它们本身非常有用 .
stdlib也很有用FileUtils
这很不错
正如其他人已经说过的那样,你的第一行应该是
而且你还必须使它可执行:(在shell中)
然后遵循ruby代码 . 如果您打开一个文件
该文件在shell中使用
pwd
获取的当前目录中打开 .脚本的路径也很简单 . 使用
$0
,您将获得shell的第一个参数,它是脚本的相对路径 . 绝对路径可以这样确定:对于文件系统操作,我几乎总是使用Pathname . 这是许多其他文件系统相关类的包装器 . 也很有用:Dir,File ......
当使用Ruby作为shell脚本时,上面的答案很有趣并且非常有用 . 对我来说,我不使用Ruby作为我的日常语言,我更喜欢使用ruby作为流量控制,仍然使用bash来完成任务 .
一些辅助函数可用于测试执行结果
使用帮助程序,ruby脚本可能是bash相似的:
这里有很多好建议,所以我想补充一点 .
You can pipe inside Ruby, too . 它's a link to my blog, but it links back here so it'没关系:)这个话题可能还有更高级的东西 .
正如其他人所指出的那样,如果你想认真对待Rush:不仅仅是作为一个贝壳替代品(这对我来说有点太过分了)而且还有as a library for your use in shell scripts and programs.
在Mac上,使用Ruby内部的Applescript获得更多功能 . 这是我的
shell_here
脚本:“我怎么写ruby”有点超出了SO的范围 .
但是要将这些ruby脚本转换为可执行脚本,请将其作为ruby脚本的第一行:
然后做可执行文件:
然后你走吧