स्क्रिप्ट पर तर्क कैसे पास करें जो कि बैश करने के लिए इनपुट है


10

अभी मेरे पास वन-लाइनर है जैसे:

curl -fsSL http://git.io/vvZMn | bash

यह स्क्रिप्ट डाउनलोड कर रहा है और इसे स्टड फ़ाइल के रूप में बैश कर रहा है। मैं अतिरिक्त तर्क के साथ इस स्क्रिप्ट को चलाना चाहूंगा print

शायद ऐसा कुछ हो?

curl -fsSL http://git.io/vvZMn | bash -- print

लेकिन यह काम नहीं करता है।


4
आप printयहाँ क्या करने की उम्मीद कर रहे हैं? चलाए जा रहे आदेशों को प्रदर्शित करें? यदि ऐसा है, तो प्रयास करें bash -x। नोट: यह curl | bashदिनचर्या एक बड़े पैमाने पर सुरक्षा छेद है; आपको यह देखने को नहीं मिलता है कि जब तक आपका सर्वर pwned नहीं किया जाएगा, तब तक क्या होगा।
स्टीफन हैरिस

जवाबों:


16

मेरा मानना ​​है कि आप जो खोज रहे हैं वह -sविकल्प है। इसके साथ -s, आप स्क्रिप्ट में तर्क पास कर सकते हैं।

इसे स्पष्ट करने के लिए एक डमी उदाहरण के रूप में:

$ echo 'echo 1=$1' | bash -s -- Print
1=Print

यहां, आप देख सकते हैं कि स्टडिन पर दी गई स्क्रिप्ट को स्थितीय पैरामीटर दिया गया है Print। आपकी स्क्रिप्ट में एक -u UUIDतर्क है और इसे भी समायोजित किया जा सकता है:

$ echo 'echo arguments=$*' | bash -s -- -u UUID print
arguments=-u UUID print

तो, आपके मामले में:

curl -fsSL http://git.io/vvZMn | bash -s -- print

या,

curl -fsSL http://git.io/vvZMn | bash -s -- -u UUID print

जैसा कि स्टीफन हैरिस ने बताया, एक स्क्रिप्ट डाउनलोड करना और इसे निष्पादित करना, दृष्टि अनदेखी करना, एक सुरक्षा चिंता है।


3

यदि आपका सिस्टम है /dev/stdin, तो आप उपयोग कर सकते हैं

$ echo 'echo 1=$1' | bash /dev/stdin print
1=print

ऐसा करें:

$ echo 'echo 1=$1' | bash /dev/stdin -- print
1=--

यदि आप उपयोग करना चाहते हैं --, तो यह करें:

$ echo 'echo 1=$1' | bash -- /dev/stdin print
1=print
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.