Bash -c-bash, shell का उपयोग करके एक नए खोल में बुलाए गए कमांड को सभी तर्क पास करें

मैंने निम्नलिखित उदाहरणों को सरल बना दिया है:

file1.sh:

#!/bin/bash
bash -c "./file2.sh [email protected]"

file2.sh:

#!/bin/bash
echo "first $1"
echo "second $2"

मुझे उम्मीद है कि अगर मैं फोन करता हूं ./file1.sh a b लेना:

first a
second b

लेकिन इसके बजाय मुझे मिलता है:

first a
second

दूसरे शब्दों में, मेरे बाद के तर्क के बादपहला व्यक्ति उस आदेश के माध्यम से पारित नहीं हो रहा है जिसे मैं एक नए बैश खोल के अंदर निष्पादित कर रहा हूं। मैंने फ़ाइल 1.sh फ़ाइल में उद्धरण चिह्नों को हटाने और स्थानांतरित करने के कई बदलावों की कोशिश की है, लेकिन इसे काम करने के लिए नहीं मिला है ।

यह क्यों हो रहा है, और मैं जिस व्यवहार को चाहता हूं उसे कैसे प्राप्त करूं?

(अद्यतन - मुझे एहसास है कि यह व्यर्थ लगता है कि मैं "एमइस उदाहरण में bash -c को कॉल करना, मेरी वास्तविक फ़ाइल 1.sh एक कमांड स्क्रिप्ट है जो एक कमांड स्क्रिप्ट है जिसे स्थानीय रूप से डॉकर कंटेनर में चलाने के लिए कहा जाता है, इसलिए यह वास्तव में है docker exec -i mycontainer bash -c "")

उत्तर:

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

परिवर्तन file1.sh इसके लिए विभिन्न उद्धरण के साथ:

#!/bin/bash
bash -c "./file2.sh "[email protected]"" - "[email protected]"

- "[email protected]" populate करने के लिए hyphen गुजर रहा है $0 तथा [email protected] में अन्य सभी स्थितित्मक पैरामीटर को पॉप्युलेट करने के लिए पारित किया जा रहा है bash -c कमांड लाइन।

आप इसे भी बना सकते हैं:

bash -c "./file2.sh "[email protected]"" "$0" "[email protected]"

हालांकि उपयोग करने की कोई वास्तविक आवश्यकता नहीं है bash -c यहां और आप बस इसका उपयोग कर सकते हैं:

./file2.sh "[email protected]"

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