我在一个厨师食谱中有一个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
这可能吗?
答案 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