2012-09-13 114 views
2

我想告诉用户他使用的virtualenv版本是否是最新的。测试Makefile中的软件版本

但它不工作。任何想法 ?

virtualenv: 
    if [ ! -f $(PYTHON) ]; then \ 
     version=`$(VIRTUALENV) --version`;\ 
     check="1.8.2";\ 
     winner=`echo -e "$${version}\n$${check}" | sed '/^$$/d' | sort -nr | head -1`;\ 
     if [[ "$(winner)" = "$(version)" ]]; then \ 
      $(VIRTUALENV) $(ROOT_DIR)/lib/virtualenv; \ 
     else \ 
      echo "Please upgrade your virtualenv>=1.8.2";\ 
      exit 1;\ 
     fi \ 
    fi 
+0

为什么就不能'情况下$$($(VIRTUALENV)--version)中1.8.2)真;; *)false ;; esac'您可能想要添加一些诊断程序等,但比较代码看起来太复杂和脆弱。 – tripleee

回答

3

好吧,这是一个小的Makefile招用$

virtualenv: 
    if [ ! -f $(PYTHON) ]; then \ 
     version=`$(VIRTUALENV) --version`;\ 
     check="1.8.2";\ 
     winner=`echo -e "$${version}\n$${check}" | sed '/^$$/d' | sort -nr | head -1`;\ 
     if [[ "$${winner}" = "$${version}" ]]; then \ 
      $(VIRTUALENV) $(ROOT_DIR)/lib/virtualenv; \ 
     else \ 
      echo "Please upgrade your $${version} version of virtualenv to >= 1.8.2";\ 
      echo " $ sudo pip install -U distribute pip virtualenv";\ 
      exit 1;\ 
     fi \ 
    fi 
+0

您可能会考虑将其放在.sh文件中,然后在目标中调用.sh文件。我使用Make为脚本编写了很多脚本,并且为了避免大量的$和$$的操作,我倾向于在目标中混合使用“内联”单行bash命令,而对于更大的脚本使用bash标注不使用大量Make变量的脚本。因人而异 –