Ruby 是一门用于快速写bash编程的语言
功能 1:调用外部命令
你对编写 shell 脚本的语言的期望是 调用外部命令。在 Ruby 中,您可以使用反引号 ():`
`ls`
就是这样!你不需要 ,或类似的东西,或导入 一个图书馆。如果你把它设置为一个变量,你将获得 命令:system
popen
my_date=`date`
注意:如果要使用(例如,如果希望输出为 重定向到 stdout 而不是字符串)或(如果要读取或 从子进程写入数据或向子进程写入数据),这些在 Ruby 中也可用!
system
popen
功能 2:状态代码固
这真的很快:在 Ruby 中,变量包含 上次执行的命令。所以,它真的很接近 Bash:$?
`true`
puts $? # 0
`false`
puts $? # 1
特点 3:它是一种类型化语言
Ruby 不是一种静态类型语言,但它有类型。事实上,它是一个 面向对象语言,它严格遵循 OOP 范式(超过 Python,在某些方面甚至比 Java 还要多!另一方面,Bash 一切都是一根绳子,这导致了几个安全问题......
total_lines = `wc -l my_file`.to_i # an int containing the number of lines of a file
half = total_lines.div 2 # integer division
puts `head -n #{half} my_file` # print half of the file
特点4:功能结构
Ruby 实现 、 (filter)、 等 作为方法的功能操作。因此,例如,您可以将 命令输出:map
select
reduce
flat_map
map
puts `ls`.lines.map { |name| name.strip.length } # prints the lengths of the filenames
给 Git 爱好者的注意事项:我知道我只能使用 ,但这是我想到的第一个例子 演示正则表达式的用法...
git branch --show-current
功能 5:正则表达式匹配
正则表达式是 Ruby 中的一种类型,使用正则表达式的操作内置于 语言。看看这个例子,我们从中得到当前的 git 分支名称调用:git branch
current_branch_regex = /^\* (\S+)/
output_lines = `git branch`.lines
output_lines.each do |line|
if line =~ current_branch_regex # match the string with the regex
puts $1 # prints the match of the first group
end
end
特点 6:简单的线程
如果想要使用多个线程,Ruby 可能是最简单的线程之一 语言来做。看:
thread = Thread.new do
puts "I'm in a thread!"
end
puts "I'm outside a thread!"
thread.join
因此,例如,它可用于同时下载多个文件:
(1..10).map do |i| # iterates from i=1 to i=10, inclusive
Thread.new do
`wget http://my_site.com/file_#{i}` # you can use variables inside commands!
end
end.each { |thread| thread.join } # do/end and curly braces have the same purpose!
功能 7:内置文件和目录操作
在 Ruby 中,所有文件操作都是类的方法,所有 目录操作是类的方法,它应该是。在 Python 中, 例如,如果要读取您使用 的文件,但如果您想 删除您需要使用的它,并做很多其他事情 与文件无关。File
Dir
open
os.remove
os
因此,在 Ruby 中:
exists = File.exists? 'My File' # methods that return booleans end in ?
file_content = File.open('My File').read
File.delete 'My File' # parentheses are optional if it's not ambiguous
结论
我希望在阅读这篇简短的文字后,您考虑将 Ruby 用作 替换复杂的 shell 脚本。我的意思是,我不希望你放弃 完全 Bash,但当事情变得复杂时,请考虑使用 Ruby。当然,你 可以在 Python、Perl 甚至 JS 中做到这一点,但是,作为我个人的选择,我认为 Ruby 是最完整、最简单的 Bash 替代品!