बैश अगर सिंगल लाइन पर


51

मैं जानना चाहूंगा कि अगर मैं एक ही लाइन पर बैश स्क्रिप्ट के अंदर की स्थितियों को कैसे लिख सकता हूं।

उदाहरण के लिए, मैं इसे एक पंक्ति में कैसे लिख सकता हूं, और फिर अगले पर एक और एक जैसा लगाऊं?

if [ -f "/usr/bin/wine" ]; then
    export WINEARCH=win32
fi

मैं यह पूछता हूं क्योंकि मेरे पास मेरे .ashashrc में काफी कुछ उपनाम हैं और मेरे पास कई सिस्टमों पर एक ही .bashrc (सिंक किए गए) हैं, लेकिन मुझे प्रत्येक सिस्टम पर सभी उपनामों की आवश्यकता नहीं है। मैं उनमें से अधिकांश को अगर बयानों के अंदर रखता हूं, और यह सब अब खूबसूरती से काम कर रहा है, लेकिन वे बहुत अधिक जगह लेते हैं, प्रत्येक पंक्ति के बीच 3 पंक्तियां और उनके बीच की खाली रेखा (जैसे मुझे उन्हें आसानी से दिखाई दे रही है)

मैं इस तकनीक का उपयोग पर्यावरण चर के लिए भी करूँगा।


4
आप यह भी लिख सकते हैं[ -f "/usr/bin/wine" ] && export WINEARCH=win32
ग्लेन जैकमैन

3
ध्यान रखें कि छोटा होना बेहतर नहीं है। आप शेल के तर्क ऑपरेटरों के साथ सूक्ष्म तर्क त्रुटियां प्राप्त कर सकते हैं। चुनें कि क्या पढ़ना आसान है और बनाए रखना है।
ग्लेन जैकमैन

जवाबों:


84

आप इसे इस तरह से लिखेंगे:

if [ -f "/usr/bin/wine" ]; then export WINEARCH=win32; fi

ध्यान दें कि यह भी लिखा जा सकता है (जैसा कि @glennjackman द्वारा सुझाया गया है):

[ -f "/usr/bin/wine" ] && export WINEARCH=win32

1
खैर यह आसान था ... :) अब मुझे लगता है कि यह पूछने के लिए अजीब लगता है। उत्तर के लिए धन्यवाद, यह बहुत मदद की!
होराइउ म्लेंडा

7
एक अंतर है। 1. अभिव्यक्ति 0 स्थिति के साथ बाहर निकलेगी, 2. यदि फ़ाइल मौजूद नहीं है, तो अभिव्यक्ति गैर 0 स्थिति से बाहर निकल जाएगी। यह कुछ फर्क कर सकता है यदि आप तैनाती जैसे कुछ स्वचालित कार्यों में इसका उपयोग करते हैं जहां कार्य सफलता कमांड की स्थिति से बाहर निकलने पर निर्भर करती है।
जैनिस ग्रूजिस

@ Hora wasiuMlendea जाहिर है कि यह आसान था। यदि आप जानते हैं कि कैसे। लेकिन वाक्यविन्यास fiddly है जैसे [1 == 1] एक त्रुटि है लेकिन [1 == 1] कार्य करता है। और अर्ध-कॉलोन। आप कुछ बुरी तरह से डिज़ाइन किए गए सिंटैक्स को नहीं जानने के लिए अजीब महसूस कर सकते हैं। आपकी 'भावना' का कोई मतलब नहीं है। यह एक उपयोगी सवाल था, भले ही दुर्भाग्य से आपको समझ न आए।
बार्लोप

@balop नहीं, मैं पूरी तरह से देख रहा हूं कि आपका क्या मतलब है और मैं सहमत हूं। यह सिर्फ उस समय है जब मैंने व्यक्तिगत बिट्स को समझा जो उस वाक्य रचना (&& के साथ एक) को बनाया। आमतौर पर चीजों को एक साथ रखना आसान और सहज होता है, लेकिन जैसा कि आपने कहा, यह भाषा बहुत ही काल्पनिक है और बहुत सहज नहीं है।
होराइउ म्लेंडा

4

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


5
ध्यान दें कि यह आपके शेल पर निर्भर हो सकता है (और संभवतः आपके शेल की सेटिंग्स पर आगे)। मेरे कंप्यूटर पर कुछ त्वरित परीक्षण इस कार्य को बैश में दिखाता है (इसलिए +1 है), लेकिन पिछले कमांड पर लौटने पर Zsh लाइन ब्रेक को सुरक्षित रखता है।
8bittree
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.