bash中程序的版本检查

时间:2017-07-10 09:55:23

标签: bash ionic-framework

如果离子的版本是3.4.0,我试图在bash中构建一个简单的if开关:

mles:operations-ionic mles$ node_modules/ionic/bin/ionic -v
3.4.0
mles:operations-ionic mles$ if [[ "$(node_modules/ionic/bin/ionic -v)" = "3.4.0" ]]; then echo "Ionic3 Project"; fi
mles:operations-ionic mles$ 

这应该输出Ionic3 Project到控制台,但它没有。为什么呢?

@Inian:我正在写信给stdout。一个简单的比较会写入控制台:

mles:operations-ionic mles$ if [[ "1" = "1" ]]; then echo "Ionic3 Project"; fi
Ionic3 Project
mles:operations-ionic mles$ 

并且将版本存储到变量的技巧没有做任何事情:

mles:operations-ionic mles$ version=$(node_modules/ionic/bin/ionic -v); if [[ "${version}" = "3.4.0" ]]; then echo "Ionic3 Project"; fi
mles:operations-ionic mles$ 

@camh没有隐形字符。将其保存到脚本中:

version=$(node_modules/ionic/bin/ionic -v)
if [[ ${version} == "3.4.0" ]]; then
  echo "Ionic3 Project";
fi
printf '<%s>' "${version}"

输出:

mles:operations-ionic mles$ ./jenkins.sh 
3.4.0>mles:operations-ionic mles$ 

1 个答案:

答案 0 :(得分:1)

看起来离子开发人员使用隐藏字符搞砸了版本号。如果将命令传递给显示不可打印字符的cat -A,您将意识到其前面确实存在隐藏字符:

ionic --version | cat -A
^[[2K^[[G3.4.0$

(最后的$只是换行符)

实际上我认为这应该固定在离子方面。我filed a bug

您可以使用的解决方法是:

version="$(ionic info | awk '/Ionic CLI/{print $NF}')"

<强>更新

问题已在https://github.com/ionic-team/ionic-cli/commit/cb448dbe535ab77d5feb07090de962e17290e557中修复。它应该在下一个版本中消失(在3.4.0之后)。