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


1

यह समझाने के लिए थोड़ा गड़बड़ है।

मेरे पास एक स्क्रिप्ट है जिसे मैं इस तरह से तैनात करना चाहता हूं:

curl -Ls example.com/myscript.sh | bash

मुसीबत मानक स्क्रिप्ट से स्क्रिप्ट पढ़ता है जैसे:

echo "You should edit /srv/pillar/tm.sls now. Comments are in the file."
echo Type "skip" to skip or anything else to edit.
read text
if [ "$text" != "skip" ]; then
sudo pico /srv/pillar/tm.sls
fi

अब, चूंकि स्टडिन स्पष्ट रूप से स्क्रिप्ट के स्रोत के रूप में काम कर रहा है, इसलिए यह वर्तमान में काम नहीं करता है। क्या कोई ऐसा तरीका है जिससे मैं टर्मिनल को पुनः प्राप्त कर सकता हूं?

(वर्तमान वैकल्पिक हल इस तरह यह तैनात करने के लिए है: curl -Ls example.com/myscript.sh > myscript.sh && bash myscript.sh)


उपयोगकर्ताओं को पिको का उपयोग करने के लिए मजबूर न करें। उपयोगeditor=${VISUAL:-$EDITOR}; sudo "${editor:-pico}" file
ग्लेन जैकमैन

टिप के लिए धन्यवाद - मैंने उस तरह के एक चर की तलाश की, लेकिन न तो दृश्य और न ही EDITOR सेट किए गए थे। इसके अलावा {$ VAR: -dfault} प्रतिस्थापन के बारे में नहीं पता था, फिर से धन्यवाद।
स्टीव बेनेट

जवाबों:


2

एक प्रक्रिया प्रतिस्थापन का उपयोग करें

bash <(curl -Ls example.com/myscript.sh)

धन्यवाद - मुझे अभी भी ग्नू पृष्ठ से समझ नहीं आ रहा है कि यह पाइपिंग से कैसे अलग है, लेकिन यह काम करता है। यह मेरे वर्तमान वर्कअराउंड से बेहतर है, लेकिन मैं अभी भी फॉर्म में एक रास्ते की उम्मीद कर रहा था curl ... | bash, क्योंकि मुझे लगता है कि लोग यही उम्मीद करते हैं।
स्टीव बेनेट

@SteveBennett यह उस पाइपिंग से अलग है जिसमें यह कहा जाता है कि FIFO का नाम bash filenameकहां filenameहै जिससे curlप्रक्रिया अपना आउटपुट लिखती है। पाइपिंग परिभाषा से संभव नहीं है: यह बैश के लिए एक धारा को जोड़ता है stdin
zwets

पाइपिंग का एक साइड-इफेक्ट होता है: एक पाइपलाइन के घटकों को सबहेल में निष्पादित किया जाता है। कठिनाई कुछ इस तरह से दिखाई देती है: seq 10 | while read num; do ((sum+=num)); done; echo $sum- $ राशि रिक्त है क्योंकि लूप एक सब-टाइम में निष्पादित होता है, और सबमिशन के "संशोधनों" के सभी संशोधन गायब हो जाते हैं, जब सबस्क्रिप्शन बाहर निकलता है।
ग्लेन जैकमैन

हाँ धन्यवाद। दिलचस्प है कि मैंने इस तकनीक को पहले कभी नहीं देखा है!
स्टीव बेनेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.