मैं निम्नलिखित स्क्रिप्ट चलाता हूं:
VAR="Test"
sh -c 'echo "Hello $VAR"'
लेकिन मुझे मिलता है:
# ./test.sh
Hello
मैं VARअपनी स्क्रिप्ट के चर को शेल के साथ कैसे बना सकता हूं sh -c '...'?
मैं निम्नलिखित स्क्रिप्ट चलाता हूं:
VAR="Test"
sh -c 'echo "Hello $VAR"'
लेकिन मुझे मिलता है:
# ./test.sh
Hello
मैं VARअपनी स्क्रिप्ट के चर को शेल के साथ कैसे बना सकता हूं sh -c '...'?
जवाबों:
या तो exportइसे एक पर्यावरण चर में बदलने के लिए उपयोग करें, या इसे सीधे कमांड में पास करें।
VAR="Test" sh -c 'echo "Hello $VAR"'
VAR="Test"
export VAR
sh -c 'echo "Hello $VAR"'
शेल कोड के आसपास दोहरे उद्धरण चिह्नों का उपयोग करने से बचें ताकि प्रक्षेप की अनुमति दी जा सके जैसे कि कमांड इंजेक्शन कमजोरियों का परिचय:
sh -c "इको 'हैलो $ VAR'
अगर $VARकुछ कहा जाता है, तो रिबूट का कारण बनता है';reboot #
export var="Test" एक पंक्ति में ।
यहां चर को पास करने का एक और तरीका है sh -c(स्थितिगत तर्कों के रूप में):
{
VAR="world"
VAR2='!'
sh -c 'echo "Hello ${0}${1}"' "$VAR" "$VAR2"
}
$@उम्मीद के अनुसार काम करने की अनुमति देगा , जैसे। sh -c 'echo "Hello $@"' _ "$VAR" "$VAR2"`
$0शेल द्वारा त्रुटि / चेतावनी संदेशों में प्रदर्शित होता है।
यदि आप उन्हें पर्यावरण चर के रूप में निर्यात नहीं करना चाहते हैं, तो यहां एक चाल है जो आप कर सकते हैं। एक फ़ाइल में अपनी वैरिएबल परिभाषा को सहेजें .var_init.shऔर इसे अपने उप-शेल में इस तरह से स्रोत करें:
.var_init.sh
VAR="Test"
कमांड लाइन से:
sh -c ". .var_init.sh && echo \$VAR" # Make sure to properly escape the '$'
इस तरह, आप केवल अपने सब-वे के निष्पादन पर अपने चर निर्धारित करते हैं।
ENV=.var_ini.sh sh -c '...'
.var_init.shवर्तमान निर्देशिका में (जैसा कि विरोध किया गया है $PATH) के लिए देखा जाना अपेक्षित है , तो यह लिखा जाना चाहिए. ./var_init.sh