繁体   English   中英

厨师食谱中unix命令的输出

[英]output of unix command in chef recipe

我在厨师食谱中有一个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

这可能吗?

好的,最后终于可以使用键盘了,可以全部写出来。

您所拥有的内容的字面翻译为:

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

这样避免了必须产生大量进程,而不必直接执行相同(我认为)的逻辑。

您应该能够像下面这样:

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

似乎超出了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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM