要检查安装程序是否已安装,我做了:
installer not found
输出说:
11
但是如果已安装,它将显示10
或<=10 || >=11
(任何数字)。如果输出为not installed
,则它将显示def get_installer_linux_version
begin
cmd = Mixlib::ShellOut.new('installer status |grep Version| cut -c12-13')
cmd.run_command
rescue Errno::ENOENT => e
return '0.0'
end
return 'Version 10' if cmd.stdout.include? '10'
return 'Version 11' if cmd.stdout.include? '11'
end
,然后继续安装。在库中,它给出:
if get_installer_linux_version.to_i <= 10 || get_installer_linux_version.to_i >= 11
log 'installer is installed'
else
log 'installer is not installed so procceding with the installation'
在安装配方中是:
unsigned long *inputParameters
答案 0 :(得分:2)
您的代码中有很多东西都可以被认为是有缺陷的,但是出于您的问题,我将着重于此。
get_installer_linux_version
返回一些可能的值。字符串"version 10"
,"version 11"
,"0.0"
或nil
。您调用此函数,然后在其上调用to_i
。
也许这将有助于阐明这一点:
"version 10".to_i
#=> 0
我将猜测这不是预期的行为。无论您的get_installer_linux_version
中发生了什么,在您调用0
之后,返回的字符串将始终为to_i
。然后,您确定<= 10
仍然小于0
的{{1}},并记录10
。
我还敢冒险猜测使用"installer is installed"
最终会在处理版本号时给您带来麻烦,但这是另一个问题。
为进一步说明,让我按照自己编写的代码编写代码,并始终如一,并查看是否看起来有些异常:
include? 'XX'
您期望结果是什么?尽管if 0 <= 10 || 0 >= 11
log 'installer is installed'
else
log 'installer is not installed so procceding with the installation'
永远不会大于11,但它总是小于0
,因此您的结果始终相同。
只需将其放在此处,因为我越看您的样本就越有意义。
10
检查左操作数的值是否大于或等于 右操作数的值,如果是,则条件为真。
>=
检查左操作数的值是否小于或等于该值 正确的操作数,如果是,则条件成立。