2015-01-07 9 views
7

की कल्पना करते हैं कि मेरे सर्वर पर, मैं निम्न फ़ाइलें हैं:बैश स्क्रिप्ट और regex मुद्दा

[email protected]:/var/log/foo$ ls 
fooFile1 fooFile2 logFile logFile.1 logFile.2 

मैं एक संग्रह हर फ़ाइल लेकिन लॉगफ़ाइल युक्त बनाना चाहता था *।। इसलिए मैं आदेश के साथ आया था:

[email protected]:~$ tar -czf foo.tar.gz /var/log/foo/!(logFile.*)

और यह ठीक काम करता है! हालांकि, जब एक स्क्रिप्ट है जो एक ही काम करता है बनाने के लिए कोशिश कर रहा:

#!/bin/bash 

tar -czf foo.tar.gz /var/log/foo/!(logFile.*) 

मैं निम्न त्रुटि के पार आया था:

./test.sh: line 3: syntax error near unexpected token '(' 
./test.sh: line 3: 'tar -czf foo.tar.gz /var/log/foo/!(logFile.*)' 

समस्या नहीं टार संबंधित (मैं एक ही मुद्दे के बजाय ls का उपयोग कर पूरा किया जाता है tar)

मुझे नहीं पता कि यह त्रुटि कहां से आ रही है। क्या कोई मुझे बता सकता है कि मैं गलत हूं?

सिर्फ कुटिया नीचे इस लाइन Ubuntu 12.04 पर

उत्तर

7

प्लेस मेट:

shopt -s extglob 

अपनी स्क्रिप्ट में विस्तारित ग्लोब विकल्प को सक्षम करने के लिए।

!(logFile.*) विस्तारित ग्लोब पैटर्न आवश्यक होता है कि extglob

+4

यह स्पष्ट उनका कहना है कि इस विकल्प का एक इंटरैक्टिव खोल, जो व्यवहार में अंतर के कारण है में डिफ़ॉल्ट रूप से सक्षम किया गया है लायक है सक्षम करने के लिए है। –

+1

मुझे इसमें और अधिक देखने की आवश्यकता होगी। तुम दोनों का धन्यवाद ! –

संबंधित मुद्दे