मैं अपनी कमांड लाइन प्रॉम्प्ट से इस कमांड को चला सकता हूं:
cp -r folder/!(exclude-me) ./
वर्तमान निर्देशिका में नामित उपनिर्देशिका folder
को छोड़कर सभी सामग्रियों की पुनरावृत्ति करने के लिए exclude-me
। यह बिल्कुल इच्छित के अनुसार काम करता है। हालाँकि, मेरे द्वारा लिखी गई बाश स्क्रिप्ट में काम करने के लिए मुझे इसकी आवश्यकता है, जहाँ मेरे पास यह है:
if [ -d "folder" ]; then
cp -r folder/!(exclude-me) ./
rm -rf folder
fi
लेकिन जब मैं स्क्रिप्ट चलाता हूं:
bash my-script.sh
मैंने इसे प्राप्त किया:
my-script.sh: line 30: syntax error near unexpected token `('
my-script.sh: line 30: ` cp -r folder/!(exclude-me) ./'
और मैं कमांड प्रॉम्प्ट से क्यों काम करता हूं के रूप में नुकसान में हूं, लेकिन एक ही लाइन बैश स्क्रिप्ट में काम नहीं करता है।
env > file1
स्क्रिप्ट में चलाने और निष्पादित करने की कोशिश की./it
, और फिरenv > file2
औरsource it
, इस उम्मीद में कि मुझेenv
एस में अंतर मिला होगा , जो कि मामला नहीं है। मैं प्रोग्रामेटिक रूप से दो शेल के बीच के सभी अंतर को कैसे सूचीबद्ध कर सकता हूं (इस मामले में इंटरएक्टिव बनाम गैर-इंटरएक्टिव)?