在日常开发中,有时候我们需要让程序去调用操作ref="/tag/171/" style="color:#E3A3CF;font-weight:bold;">系统自带的命令,比如压缩文件、查看目录、启动服务等。Ruby 作为一门灵活的脚本语言,提供了多种方式来执行系统命令,特别适合写一些自动化小工具。
使用反引号(`)
最简单的方式就是用反引号包裹命令,它会执行命令并返回输出结果。比如想查看当前目录下的文件列表:
`ls -l`
这个表达式会返回终端执行 ls -l 的输出内容,可以直接赋值给变量:
result = `df -h`
puts result
这在写一个磁盘使用情况监控小脚本时特别实用。
使用 %x[] 语法
和反引号功能一样,%x[] 更适合命令中包含引号的场景,避免转义麻烦:
output = %x[echo "Hello Ruby"]
puts output
看起来更清晰,尤其命令复杂的时候。
Kernel.system 方法
如果你只关心命令是否成功执行,而不关心输出内容,可以用 system:
if system("ping -c 1 google.com")
puts "网络通"
else
puts "网络不通"
end
它返回布尔值,适合做条件判断。
Kernel.exec 和 Kernel.spawn
exec 会直接替换当前进程去运行命令,脚本后续代码不再执行:
exec('vim /tmp/test.txt')
运行后原 Ruby 脚本就结束了,类似你在终端输入完命令就进入编辑器那种感觉。
spawn 则可以在后台启动新进程,适合需要并行处理的场景:
pid = spawn("sleep 5 && echo 'done'")
puts "任务已提交"
Process.wait pid
安全提醒
如果命令里拼接了用户输入,一定要小心。比如这样写很危险:
system("rm -rf #{user_input}")
一旦用户输入恶意内容,可能删掉重要文件。建议尽量用参数数组形式:
system("echo", user_input)
这样 Ruby 会做基本的安全处理。
这些方法各有用途,写备份脚本、部署工具或者系统监控时都能派上用场。选对方式,能让脚本既简洁又可靠。