2011-01-10 17 views
28

मुझे पता है कि दूरदराज के bash स्क्रिप्ट को निष्पादित करने के लिए द्वारा दिलवाया को क्रियान्वित करने के लिए पार्टी की योजना बनाई है, इन वाक्यविन्यास के माध्यम से:पैरामीटर प्रदान करने के लिए जब एक स्क्रिप्ट कर्ल

curl http://foo.com/script.sh | bash 

या

bash < <(curl http://foo.com/script.sh) 

जो एक ही परिणाम दे।

लेकिन अगर मुझे बैश स्क्रिप्ट में तर्क पारित करने की आवश्यकता है तो क्या होगा?

./script.sh argument1 argument2 

मैं इस तरह कई संभावनाएं की कोशिश की, सफलता के बिना: जब स्क्रिप्ट स्थानीय रूप से सहेजा जाता है यह संभव है

bash < <(curl http://foo.com/script.sh) argument1 argument2 

उत्तर

54

कोशिश

curl http://foo.com/script.sh | bash -s arg1 arg2 

बैश मैनुअल का कहना है:

यदि -s विकल्प मौजूद है, या यदि कोई तर्क rema नहीं है विकल्प प्रसंस्करण के बाद, मानक मानक से आदेश पढ़ा जाता है। यह विकल्प एक इंटरैक्टिव खोल का आह्वान करते समय स्थितित्मक पैरामीटर सेट करने की अनुमति देता है।

+3

धन्यवाद दूंगा! Gists के साथ बेहद उपयोगी :) –

+1

अगर कोई छोटा तर्क है तो काम न करें: curl http://foo.com/script.sh | bash -s -y – Xorax

+1

'-p blah -d blah' जैसी चाबियों का उपयोग करने वाले पैरामीटर के बारे में क्या? – CMCDragonkai

13

अन्य विकल्प:

curl http://foo.com/script.sh | bash /dev/stdin arguments 
bash <(curl http://foo.com/script.sh) arguments 
+2

सभी विधियां $ 0 तर्क पर भिन्न हैं। "-s" के लिए यह "bash" है, "/ dev/stdin" के लिए यह "/ dev/stdin" और "<(...)" $ 0 तर्क देता है जैसे "/ dev/fd/63"। – jinowolski

+0

स्क्रिप्ट तर्कों के साथ पहला वैकल्पिक कार्य '-', यानी विकल्प –

+0

से शुरू होता है कृपया मुझे –

37

jinowolski's answer पर थोड़ा सुधार करने के लिए, आप का उपयोग करना चाहिए:

curl http://example.com/script.sh | bash -s -- arg1 arg2 

सूचना दो डैश (-) जो पार्टी कह रहे हैं कुछ भी नहीं करने के लिए की प्रक्रिया इसे दबाने के लिए तर्क के रूप में पालन करें।

जैसे इस तरह यह तर्क के किसी भी प्रकार के साथ काम करेंगे,:

curl -L http://bootstrap.saltstack.org | bash -s -- -M -N stable 

stdin के माध्यम से इनपुट के किसी भी प्रकार, बस कर्ल नहीं के साथ पाठ्यक्रम काम का हो जाएगा ताकि, आप पुष्टि कर सकते हैं इतना है कि यह आसान के साथ काम करता गूंज के माध्यम से bash स्क्रिप्ट इनपुट:

echo 'i=1; for a in [email protected]; do echo "$i = $a"; i=$((i+1)); done' | \ 
bash -s -- -a1 -a2 -a3 --long some_text 

आप उत्पादन

1 = -a1 
2 = -a2 
3 = -a3 
4 = --long 
5 = some_text 
+1

प्रारूप को बताने के लिए एक तर्क के लिए एक उदाहरण दें, और यह स्पष्ट है कि आपको ऐसा क्यों करना चाहिए। – shrikeh

+0

स्पष्ट स्पष्टीकरण के लिए धन्यवाद। यह चाल वास्तव में उपयोगी है! – agate

संबंधित मुद्दे