1. ``
反引号
- 在Kernel中定义
1.a. %x{}
百分号X < 反引号的另一种语法
- 在parse.y中定义,详情请参阅讨论
2. system()
3. fork()
4. open()
- 打开一个管道
- Kernel#open
4.a. IO.popen()
< 和 open()
行为相同
- 打开一个管道
- IO#popen
4.b. open("|-")
- 分叉到一个管道
4.c. IO.popen("-")
与open("|-")
的行为相同
- 创建一个管道(pipe)的子进程
- 参考讨论
5. Open3.popen3()
require 'open3'
- 标准库Open3
6. PTY.spawn()
require 'pty'
- 标准库PTY
7. Shell.transact()
require 'shell'
- 标准库Shell
什么时候应该放弃可靠的反引号(back-tick)而使用更复杂的方法?
编辑1:感谢Avdi Grimm的文章,他描述了每种方法的使用示例:#1 (& gist);#2 (& gist);#3。它们是非常好的资源来回答如何使用,但它们并没有明确回答什么时候应该使用每种方法或为什么使用这些方法,因此在我看来不是这个问题的完整回答。