बैश स्क्रिप्ट में खराब प्रतिस्थापन त्रुटि - लिनक्स, बैश, खोल, वाक्यविन्यास-त्रुटि

मैंने बहुत कोशिश की है लेकिन इसका समाधान नहीं हो सका। मेरे पास एक साधारण लिपि है:

#! /bin/sh
o="12345"
a=o
b=${!a}
echo ${a}
echo ${b}

जब निष्पादित किया गया

$ . scp.sh

यह बिना किसी त्रुटि के सही आउटपुट उत्पन्न करता है, लेकिन जब इसे निष्पादित किया जाता है:

$ ./scp.sh

यह उत्तपन करता है

./scp.sh: 4: ./scp.sh: खराब प्रतिस्थापन

कोई अंदाजा ऐसा क्यों हो रहा है।


मुझे बैश मोड का उपयोग करने का सुझाव दिया गया था और यह ठीक काम करता है। लेकिन जब मैं पाइथन के माध्यम से इस स्क्रिप्ट को निष्पादित करता हूं (स्क्रिप्ट हेडर को बाश में बदल रहा हूं), तो मुझे एक ही त्रुटि मिल रही है।

मैं इसे पायथन से कॉल कर रहा हूं:

import os
os.system(". ./scp.sh")

उत्तर:

जवाब के लिए 9 № 1

उपयोग करने का प्रयास करें:

#!/bin/bash

के बजाय

#! /bin/sh

उत्तर के लिए 7 № 2

इस त्रुटि का कारण यह है कि इन मामलों में दो अलग-अलग गोले का उपयोग किया जाता है।

$ . scp.sh कमांड वर्तमान खोल का उपयोग करेगा (bash) स्क्रिप्ट निष्पादित करने के लिए (उप सब खोलने के बिना)।

$ ./scp.sh कमांड आपकी स्क्रिप्ट की हैशबैंग लाइन में निर्दिष्ट शेल का उपयोग करेगा। और आपके मामले में, यह या तो है sh या dash

इसका सबसे आसान तरीका पहली पंक्ति को बदल रहा है #!/bin/bash (या जो भी रास्ता bash में है)।


संबंधित सवाल
सबसे लोकप्रिय