主厨

时间:2017-02-22 14:58:20

标签: ruby unix chef

我在一个厨师食谱中有一个execute命令,我想将cwd属性设置为unix命令的输出。

execute 'run dynamically generated install file' do
    command 'make install'
    cwd '' # would like the output of `ls -Adrt /tmp/unixODBC.* | tail -n 1`
end

这可能吗?

3 个答案:

答案 0 :(得分:4)

好的,最后在键盘上,可以完整地写出来。

你所拥有的字面翻译将是:

execute 'run dynamically generated install file' do
    command 'make install'
    cwd lazy { shell_out!('ls -Adrt /tmp/unixODBC.* | tail -n 1').stdout.strip }
end

然而,这比需要的要慢得多,而且更容易发生故障,所以我建议用Ruby编写它:

execute 'run dynamically generated install file' do
    command 'make install'
    cwd lazy { Dir['/tmp/unixODBC.*'].first }
end

这避免了必须产生一堆进程,而是直接执行相同的(我认为)逻辑。

答案 1 :(得分:0)

你应该能够这样做:

execute 'run dynamically generated install file' do
    command 'make install'
    cwd `ls -Adrt /tmp/unixODBC.* | tail -n 1`
end

答案 2 :(得分:0)

这似乎超出了execute块的范围。

也许只使用ruby_block

ruby_block 'run dynamically generated install file' do
    require 'mixlib/shellout'
    block do
        cmd = Mixlib::ShellOut.new('make install')
        cmd.run_command
        cwd = cmd.stdout
        # Do more stuff with cwd...
    end
end