知用网
白蓝主题五 · 清爽阅读
首页  > 软件入门

Ruby脚本中执行系统命令的几种方式

在日常开发中,有时候我们需要让程序去调用操作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 会做基本的安全处理。

这些方法各有用途,写备份脚本、部署工具或者系统监控时都能派上用场。选对方式,能让脚本既简洁又可靠。