Chef recipe:无法将反引号的输出捕获到ruby_block中的变量

f8s*_*ter 3 ruby backticks chef-infra output

我有一个带有ruby_block的Chef配方包含:

myoutput = `keytool -import -alias #{al} -keystore #{ks} -storepass #{pw} -file #{ca} -trustcacerts -noprompt`
puts ":" + myoutput + ":"
Chef::Log.error('Error installing CA Cert') unless myoutput.include? "Certificate was added to keystore"
Run Code Online (Sandbox Code Playgroud)

(所有变量都已正确设置.)以下是相关输出:

Certificate was added to keystore
::
[2013-07-03T21:26:41-07:00] ERROR: Error installing CA Cert
Run Code Online (Sandbox Code Playgroud)

请注意::.为什么myoutput设置不正确?当我手动运行该命令时,我得到了预期的输出.反引号中的命令执行它应该执行的操作,所以我知道它正在运行,但由于某种原因,命令的标准输出没有被分配给myoutput,我无法弄清楚原因.有任何想法吗?谢谢 - 戴夫

编辑:原因是因为这个特定的'keytool'调用的输出是stderr,而不是stdout.

Har*_*pal 6

可能是输出被定向到STDERR而不是STDOUT.试试这个:

myoutput = `keytool -import -alias #{al} -keystore #{ks} -storepass #{pw} -file #{ca} -trustcacerts -noprompt 2>&1`
Run Code Online (Sandbox Code Playgroud)

我没有任何要导入的证书来测试它,但`keytool`单独运行会将输出发送到STDERR,而`keytool 2>&1`工作正常.所以我猜这个应用程序正常写入STDERR(很奇怪).