2017-03-16 8 views
5

को हल नहीं कर रहा है मेरे पास ट्रैविस का एक सेगमेंट है जहां यह cassadra_version env चर के लिए जांच करता है।travis_tag पर travis-ci regex

if [ ! -z ${CASSANDRA_VERSION} ]; then ./setup-cassandra.sh; fi;

मैं भी केवल चलाने के लिए अगर कोई टैग नियोजित कहा जाता है के लिए करना चाहते हैं।

मैं कोशिश की है: if [ ! -z ${CASSANDRA_VERSION} ] && [ "${TRAVIS_TAG}" =~ '^((?!deploy).)*$' ]; then ./setup-cassandra.sh; fi;

लेकिन यह मुझे एक द्विआधारी ऑपरेटर त्रुटि

if [ [! -z ${CASSANDRA_VERSION} ] && [ "${TRAVIS_TAG}" =~ '^((?!deploy).)*$' ]]; then ./setup-cassandra.sh; fi;

भी मुझे एक त्रुटि

if [ [! -z ${CASSANDRA_VERSION} ] && [ ${TRAVIS_TAG} =~ '^((?!deploy).)*$' ]]; then ./setup-cassandra.sh; fi;

भी देता है देता है।

तो मैंने यह भी कोशिश की: यदि [$ {TRAVIS_TAG} = ~ '^ ((?! तैनाती)।) * $']; फिर ./setup-cassandra.sh; फाई; `

यह मुझे बाइनरी ऑपरेटर भी दे रहा है।

क्या मैं ठीक से regex नहीं कर रहा हूँ?

उत्तर

5

आप दूर नहीं थे, आपका मुख्य मुद्दा यह है कि ~= एक सार्वभौमिक परीक्षण ऑपरेटर नहीं है, लेकिन bash विशिष्ट है। इन bash उन्नत परीक्षण ऑपरेटरों का उपयोग करने के लिए, आपको डबल ब्रैकेट का उपयोग करना होगा।

यह काम करेगा:

if [ ! -z ${CASSANDRA_VERSION} ] && [[ "${TRAVIS_TAG}" =~ ^((?!deploy).)*$ ]]; then ./setup-cassandra.sh; fi;

खैर, अपने regexp सही है अगर;)

उन सुधार ऑपरेटरों के बारे में अधिक जानने के लिए: http://mywiki.wooledge.org/BashFAQ/031

+0

यह कह रहा है: [[: आदेश नहीं मिला – azngunit81

+1

मेरी गलती! ** बैश ** (और यह इसके साथ निराशाजनक है) व्हाइटस्पेस के लिए बहुत समझदार है ... मैंने ब्रैकेट को बोल्ड में रखने के मेरे जवाब में एक विशेष प्रभाव डालने की कोशिश की ... लेकिन ब्रैकेट और रिक्त स्थान के बीच की जगह पाठ एक प्रतिलिपि/पेस्ट में नहीं टिकता है ... मैंने अपना जवाब संपादित कर लिया है, अब आप उस पंक्ति की प्रतिलिपि बनाने में सक्षम होना चाहिए। – arvymetal