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.
可能是输出被定向到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(很奇怪).