इस Dockerfile प्रविष्टि में "सेट -" क्या करता है?


41

मैं यह समझने की कोशिश कर रहा हूं कि यह डॉकर एंट्रीपॉइंट क्या करता है

मुझे लगता है कि डॉकफाइल्स लिखते समय यह एक बहुत ही सामान्य पैटर्न है, लेकिन मेरे बैश कौशल सीमित हैं और मुझे सभी विशेष बैश प्रतीकों कुंग फू का कोई पता नहीं है।

इसके अलावा, "-", "$!" आदि इन्हें बैश दुनिया में क्या कहा जाता है?

संक्षेप में, लाइन बलो क्या करने की कोशिश कर रही है?

if [ "${1#-}" != "$1" ]; then
  set -- haproxy "$@"
fi

जवाबों:


55

setआदेश (सेटिंग विकल्पों नहीं जब) सेट स्थितीय मापदंडों जैसे

$ set a b c
$ echo $1
a
$ echo $2
b
$ echo $3
c

--मानक "एक विकल्प के रूप में इस निम्नलिखित इलाज नहीं कुछ भी" है

"$@"सभी मौजूदा स्थिति पैरामीटर हैं।

तो अनुक्रम

set -- haproxy "$@"

आदि शब्द haproxyसामने $1 $2रखेंगे।

जैसे

$ echo $1,$2,$3
a,b,c
$ set -- haproxy "$@"
$ echo $1,$2,$3,$4   
haproxy,a,b,c

मैं "-" या नहीं का उपयोग करते हुए कोई अंतर नहीं देखता। यहां कोशिश की और वही नतीजे मिले। यदि आप अंतर को उजागर करने के लिए उत्तर को बेहतर बना सकते हैं तो मुझे अच्छा लगेगा।
लुकास कुम्हार

8
तुलना set -- -z 2 3 4और set -z 2 3 4--बंद हो जाता है -aकिया जा रहा है एक विकल्प के रूप में व्याख्या की। इस मामले में यह आवश्यक नहीं है , लेकिन इसका उपयोग करने की आदत में आने के लिए यह "अच्छा अभ्यास" है --जब आप यह सुनिश्चित कर लें कि निम्नलिखित क्या है :-)
स्टीफन हैरिस

1
दूसरा मुख्य अंतर यह है कि यदि आप किसी स्क्रिप्ट को किसी अन्य स्क्रिप्ट के अंदर set -- $arg1 $arg2सोर्स कर रहे हैं, तो आपके सॉर्ट किए गए स्क्रिप्ट का उपयोग तर्कों को पढ़ने की अनुमति देगा, अन्यथा केवल बैश एक सोर्स किए गए स्क्रिप्ट को सीधे तर्क देने का समर्थन करता है (और यह नोटिस करने के लिए मुश्किल हो सकता है)।
ड्रैगन 88
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.