【发布时间】:2013-09-18 23:16:56
【问题描述】:
我在 Windows 7 下使用 Ruby (2.0) %x{dir} 运行 DOS dir 命令。正在执行的dir 根据是否引用dir 而有所不同。
当命令是空的时,我得到一个 DOS dir 命令的完整输出:
# sends output of cmd back to program
puts 'run %x{dir}'
puts "dir= " + %x{dir}
我在命令行看到的:
run %x{dir}
dir= Volume in drive C is System
Volume Serial Number is FFFF-FFFF
Directory of C:\Users\ ...etc...
08/26/2013 09:16 AM <DIR> .
08/26/2013 09:16 AM <DIR> ..
01/28/2013 02:28 AM 10,958 AJAX RUG Test.tsc
...etc...
当我用单引号或双引号引用dir 命令时,我会返回PATH 中的GnuWin32 dir.exe 命令的输出。我花了一段时间才弄清楚 GNU dir 正在运行。是什么导致 Ruby 使用 dir 内置于 CMD.EXE 与 c:\PROGRA~2\GnuWin32\bin\dir.EXE 中的 dir ???
另外,我刚刚注意到我的“Pickaxe”和“Ruby Cookbook”使用“%x{}”语法(大括号),而在线文档使用“%x()”(PARENS)...这只是 Ruby 通用分隔符匹配的一个例子吗?
【问题讨论】:
-
我的猜测是生成(或不生成)子外壳。
-
这确实有些道理。 `
cmd` 的文档说:返回在子 shell 中运行 cmd 的标准输出。引用 cmd 时,我找不到有关行为差异的任何信息。
标签: ruby shell-exec