यहाँ स्ट्रिंग का उपयोग करके bash -c का उपयोग करने से क्या फायदा है?


11

क्या उपयोग करने bash -c 'some command'से अधिक वास्तविक लाभ हैbash <<< 'some command'

वे एक ही प्रभाव को प्राप्त करने लगते हैं।



हाय @ सूचना के लिए धन्यवाद धन्यवाद। मुझे वास्तव में यकीन नहीं था कि पोस्ट करने के लिए सबसे अच्छी जगह कहाँ थी। चूंकि, एक तरफ यह एक लिनक्स प्रश्न है, लेकिन दूसरी तरफ बैश एक तरह की स्क्रिप्टिंग भाषा है और दूसरी साइट अधिक आगंतुक है। इस तरह के मामले में, पोस्ट करने के लिए अधिक उपयुक्त स्थान कहां होगा?
योसेफ्रो

4
@yosefrow: या तो साइट ठीक IMHO होती; लेकिन क्रॉसपोस्टिंग अप्रिय है (आप दोनों साइटों पर लोगों को अपने सवाल पर समय बिताने के लिए कह रहे हैं, बिना उन्हें एक दूसरे के जवाब का लाभ दिए)।
१17 को शाम

क्या इसके बाद किसी एक साइट से पोस्ट को हटाना उचित होगा?
योसेफ्रो

2
एक और मामूली अंतर यह है कि bash -c '...'गोले में काम करेंगे जिसमें हेरस्ट्रेस नहीं हैं। आप मान रहे हैं कि बैश को बैश शेल के भीतर बुलाया जाएगा लेकिन यह हमेशा ऐसा नहीं होगा।
जोएल कॉर्नेट

जवाबों:


21

bash -c 'some command'कॉलर के मानक इनपुट तक पहुंच बनाए रखता है, इसलिए readया मानक इनपुट से पढ़ने वाले कमांड सामान्य रूप से काम करेंगे। bash <<< 'some command'की जगह है कि लाइन के साथ इनपुट में पारित किया जा रहा है, तो bash -c catऔर bash <<< catअलग बातें करते हैं।

$ bash -c cat
abc
abc
^D
$ bash <<< cat
$

दूसरी ओर $'...', यदि आप बहुत सावधानी बरतते हैं, तो आप अपने मानक इनपुट प्रदान करने के लिए उस सुविधा का उपयोग कर सकते हैं :

$ bash <<< $'read x y\nabc def ghi\necho $y'
def ghi
$

मैं उस पर भरोसा नहीं करना चाहता, लेकिन यह कभी-कभी सुविधाजनक हो सकता है।


bash -cतर्क को स्क्रिप्ट में पारित करने और $0सेट करने की अनुमति देता है :

bash -c 'some command' sh abc def

सेट हो जाएगा $1करने के लिए abcऔर $2करने के लिए defअंदर some command


3
सिंटैक्स त्रुटियां भी थोड़ा अलग शब्दों का उत्पादन करेंगी। मुख्य रूप से bash -cजिनका उल्लेख है -c, AFAIK। पूरी तरह से व्यर्थ नहीं, क्योंकि यह उन्हें नीचे ट्रैक करने में मदद कर सकता है। bash <<< 'script'मूल स्क्रिप्ट की तरह ही त्रुटियां दिखाई देती हैं; bash -c 'script'नहीं करते हैं। तुम भी उन्हें लेबल कर सकते हैं: bash -c 'script' label
व्युत्पन्न

खैर, bash <<< 'echo $1' /dev/stdin fooकाम भी करता है, और प्रिंट भी करता है foo। हालांकि सेटिंग $0कुछ और सीमित है।
इलकाचू

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