Ruby中的局部变量传递给Linux终端

时间:2015-10-22 21:15:53

标签: ruby linux

这可能不像我做的那么难,但是如何将一个局部变量干净地传递给命令行作为目录的一部分?

我正在连接类似的文本文件(基于字符串)并将它们存储在包含相同字符串的新文本文件中。

  • 假设我有一个名为class的目录,其中包含一个以每个学生命名的文本文件。格式化为LastName_FM
  • 我还有一个名为学生的学生姓氏列表

例如:

for lastname in students
   'cat class/*'+lastname+'*.txt > /class/'+lastname+'_list.txt'
end

理论上,如果我有名为的文件:

  • Smith_JM.txt
  • Smith_TR.txt
  • Smith_WE.txt
  • 2Smith_WE.txt(同名的不同学生。)

我最终会得到一个名为Smith_list.txt的文件,其中包含四个文件的内容。

感谢您的任何指示,我是Ruby的新手。

2 个答案:

答案 0 :(得分:3)

您可以将系统命令括在backticks中并将变量插入到命令中,因为反引号方法支持插值。

这是一个启动gedit的人为举例:

local_var = "gedit"
`#{local_var}`       # interpolation syntax is #{...}

编辑:这是另一个演示块内插值并将foo.txt的内容写入bar.txt的示例。您可以使用for循环执行类似的操作,但这不是常见的红宝石习惯。

files = ['foo.txt']

files.each do |f|
  puts "#{f}"           # block variable interpolated within double quotes
  `cat #{f} > bar.txt`  # block variable interpolated within backticks
end

答案 1 :(得分:0)

您可以在命令中执行以下操作:

<div class="ckDocNames">
    @foreach (var dn in Model.GetDocNamesForDocTypeId(Model.DocTypeId))
    {
        <div class="checkboxContainer, editCkBoxes">
            <input class="ckBoxes" type="checkbox" name="DocNameId" value="@dn.Value" dtid="@dn.Group.Name" />@dn.Text<br />
        </div>
    }
</div>

使用注释中指示的后退标记来运行此操作。

只能使用Dir.glob File.open和读/写的组合在Ruby中执行此操作。