एक शेल स्क्रिप्ट में टिप्पणियाँ ब्लॉक करें


250

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


2
दिलचस्प है कि इस तरह के आसान और सरल प्रश्न के बहुत अलग और जटिल उत्तर हैं।
Sigur

जवाबों:


348

बैश में:

#!/bin/bash
echo before comment
: <<'END'
bla bla
blurfl
END
echo after comment

'और 'चारों ओर ENDसीमांकक महत्वपूर्ण अन्यथा चीजें अंदर उदाहरण के लिए ब्लॉक कर रहे हैं, $(command)पार्स और निष्पादित किया जाएगा।

स्पष्टीकरण के लिए, यह और यह प्रश्न देखें।


24
क्यूट ट्रिक - जब तक 'END' कीवर्ड (जो कि निश्चित रूप से, उपयोगकर्ता द्वारा चुना गया है) तब तक टिप्पणी करने के लिए सामग्री के अंदर एक लाइन पर नहीं दिखता है।
जोनाथन लेफ़लर

9
@ एकलंगी: हाँ; उद्धरण में प्रयुक्त शब्द कुछ भी सुविधाजनक हो सकता है; EOFएक उत्कृष्ट उदाहरण है (और ऐसा ही है !, अपने आप में एक विस्मयादिबोधक चिह्न), लेकिन आप किसी भी अन्य शब्द का उपयोग कर सकते हैं SNURFLE_BURGERSया classical_end_markerजो टिप्पणी की गई सामग्री में अपने आप एक पंक्ति में प्रकट नहीं होता है। मैं रिक्त स्थान आदि के साथ प्रयोग करने से बचूंगा, लेकिन यह शब्द उनके साथ भी अच्छा काम कर सकता है।
जोनाथन लेफ़लर

4
यह निश्चित रूप से काम करता है लेकिन क्या कोई इस बारे में विस्तार से बता सकता है कि यह कैसे काम करता है? धन्यवाद
mbbce

5
@MB_CE, stackoverflow.com/questions/32126653/… देखें । उस ने कहा - यह एक कमांड ( :) चला रहा है जो अपने इनपुट को नहीं पढ़ता है और हमेशा एक सफल मूल्य के साथ बाहर निकलता है, और इनपुट के रूप में "टिप्पणी" भेज रहा है। इससे ज्यादा नहीं।
चार्ल्स डफी

2
मैं इसे अविश्वसनीय रूप से बदसूरत मानता हूं और निष्क्रिय कोड बनाने के लिए सक्रिय कोड लिखने के लिए भ्रमित करता हूं ... बस अच्छे पुराने ब्लॉक चयन मोड का उपयोग करें और # दबाएं; इससे बड़ा मुद्दा क्या है?
Rusty75

90

शेल स्क्रिप्ट पर कोई ब्लॉक टिप्पणी नहीं है।

vi(हाँ vi) का उपयोग करके आप आसानी से लाइन एन से मीटर तक टिप्पणी कर सकते हैं

<ESC>
:10,100s/^/#/

(यह पढ़ता है, लाइन # 10 से 100 स्थानापन्न लाइन शुरू (^) एक # संकेत के साथ।)

और के साथ संयुक्त राष्ट्र टिप्पणी

<ESC>
:10,100s/^#//

(यह पढ़ता है, लाइन 10 से 100 स्थानापन्न लाइन प्रारंभ (^) के बाद # के साथ # नोटिंग //।)

viजहां है वहां लगभग सर्वव्यापी है /bin/sh


Vi पर नियमित अभिव्यक्ति के साथ अच्छी चाल # लाइनों के सामने # जगह।
अतीक रहमान

5
बस एक टिप - यदि आप विम का उपयोग कर रहे हैं और यह हर पंक्ति की शुरुआत को उजागर करता है, |nohतो अंत में जोड़ें । पाइप अतिरिक्त कमांड को अलग करता है और nohनोहलाइट के लिए है। अगली बार जब आप किसी चीज़ की खोज करते हैं, तो हाइलाइटिंग शब्द स्वचालित रूप से फिर से शुरू होगा। उदाहरण::10,100s/^/#/g|noh
मैथ्यू

मुझे स्क्रिप्ट से स्वचालित होने की आवश्यकता है। वहाँ एक तरीका है कि मानव संपर्क की आवश्यकता के बिना vi के साथ एक फ़ाइल करने के लिए है?
टिमोथी स्वान

1
@TimothySwan मुझे लगता है कि gawk या sed प्रोग्राम किसी भी तरह से कर सकता है।
BeowulfNode42

vi के साथ एक टिप्पणी (या प्रीफ़िक्सिंग) का एक पसंदीदा तरीका: vi के साथ एक ब्लॉक: उस पंक्ति की शुरुआत में जाएं जिस पर आप टिप्पणी करना शुरू करते हैं (उदाहरण के लिए या <SHIFT>+G 10 <ENTER>फिर 0नेविगेट करने का कोई अन्य तरीका)। फिर <CTRL>+Vदृश्य ब्लॉक मोड में प्रवेश करने के लिए उपयोग करें और उन सभी लाइनों की शुरुआत को हाइलाइट करें जिन्हें आप टिप्पणी करना चाहते हैं (इस उदाहरण में 90 J)। फिर SHIFT+Iहाइलाइट किए गए ब्लॉक से पहले डालने के लिए दबाएं । टिप्पणी चिह्न (जैसे #) दर्ज करें और <ESC>अपनी प्रीफ़िक्सिंग समाप्त करने के लिए दबाएं । यह स्पष्टीकरण सुपर लंबा लगता है, लेकिन मेरे अनुभव में यह अभ्यास में बहुत तेज है।
Ueffes

52

आप उपयोग कर सकते हैं:

if [ 1 -eq 0 ]; then
  echo "The code that you want commented out goes here."
  echo "This echo statement will not be called."
fi

14
यह क्लासिक है, लेकिन जैसा कि stackoverflow.com/a/19409316/832230 के नोट हैं, if [ ];यह भी काम करता है।
एक्यूमेनस

12
शायद स्पष्ट if false;:। stackoverflow.com/a/18019516/2097284
कैमिल गौडयूस

3
यह केवल काम करने के लिए लगता है टिप्पणी पाठ वास्तव में कोड है। मैं पाइप और अर्धविराम के साथ टिप्पणियों में समस्याओं में भागता हूं। सनी256 जवाब काम किया।
स्वदेव

इससे भी अधिक संक्षिप्त [] होगा; परीक्षण का उपयोग कर रहा है कि
जस्टिन डंकन

27

निम्नलिखित के लिए काम करना चाहिए sh, bash, kshऔर zsh

टिप्पणी किए जाने वाले कोड के ब्लॉक अंदर रखे जा सकते हैं BEGINCOMMENTऔर ENDCOMMENT:

[ -z $BASH ] || shopt -s expand_aliases
alias BEGINCOMMENT="if [ ]; then"
alias ENDCOMMENT="fi"

BEGINCOMMENT
  echo "This line appears in a commented block"
  echo "And this one too!"
ENDCOMMENT

echo "This is outside the commented block"

उपरोक्त कोड निष्पादित करने के परिणामस्वरूप होगा:

This is outside the commented block

कोड ब्लॉक को अनलॉक्ड करने के लिए इस प्रकार टिप्पणी की गई, कहते हैं

alias BEGINCOMMENT="if : ; then"

के बजाय

alias BEGINCOMMENT="if [ ]; then"

ऊपर के उदाहरण में।


23

यदि आप एकल उद्धरणों को चकमा दे सकते हैं:

__='
blah blah comment.
'

यह मुझे पंसद है। हालांकि डबल अंडरस्कोर का क्या मतलब है? जैसा कि सबसे अच्छा मैं बता सकता हूं कि यह कन्वेंशन का उपयोग करते हुए सिर्फ एक चर नाम है जिसे इसे निजी माना जाना चाहिए?
चेसोफर्नेड

अधिकांश संपादकों में सिंटैक्स हाइलाइटिंग भी प्रदान करता है और $ __ के साथ जरूरत पड़ने पर कॉल करने योग्य होता है, हालांकि मैं स्पष्टता के लिए प्रलेखन या डॉक्स जैसे एक चर नाम का सुझाव दूंगा।
जस्सोनलहार्ड


यह सबसे अच्छा जवाब होना चाहिए। डबल अंडरस्कोर के बजाय बस कुछ डमी वैरिएबल नाम रखें
बी अबाली

कोशिश की, लेकिन विफल रहा क्योंकि वहाँ एक 'एफ' था;) टिप्पणी करने के लिए ब्लॉक के अंदर।
y__

15

: 'खोलने और 'बंद करने के लिए उपयोग करें ।

उदाहरण के लिए:

: '
This is a
very neat comment
in bash
'

यह वेगास के उदाहरण से मिलता है


2
hack-ish, लेकिन कमाल
Gergely Lukacsy

यह मेरे लिए सबसे अच्छा है।
प्रात:

14

विम में:

  1. टिप्पणी करने के लिए ब्लॉक की पहली पंक्ति पर जाएं
  2. shift-V (विजुअल मोड दर्ज करें), ब्लॉक में हाइलाइट लाइनों को ऊपर रखें
  3. चयन पर निम्नलिखित निष्पादित करें :s/^/#/
  4. कमांड इस तरह दिखेगा:

      :'<,'>s/^/#
  5. हिट दर्ज करें

जैसे

shift-V
jjj
:s/^/#
<enter>

7
अप्रतिबंधित उपयोग करने के लिए:s/^#/
Buge

@ Horta का उत्तर देखें: stackoverflow.com/a/28376319/3506015 - यहां तक ​​कि कम महत्वपूर्ण प्रेस भी हैं!
गिडवेरीया

4

आप वीआई / वीआईएम के विजुअल ब्लॉक मोड का उपयोग कर सकते हैं जो इस तरह से सामान के लिए डिज़ाइन किया गया है:

Ctrl-V  
Highlight first element in rows you want commented  
Shift-i  
#  
esc  

अयोग्यता होगी:

Ctrl-V  
Highlight #'s  
d  
l  

यह संख्याओं को गिनने या पढ़ने की संख्या रेखाओं को पढ़ने के बजाय इस तरह की क्रिया करने का vi का इंटरैक्टिव तरीका है।

अंत में, Gvim में आप ctrl-v के बजाय विजुअल ब्लॉक मोड में जाने के लिए ctrl-q का उपयोग करते हैं (क्योंकि यह पेस्ट का शॉर्टकट है)।


इस सरल विधि से प्यार करो। : ओ)
geedoubleya

4

सभी ईमानदारी में, इतना अधिक क्यों ...

मैं निष्क्रिय कोड बनाने के लिए सक्रिय कोड लिखने के लिए वास्तव में एक बुरा अभ्यास मानता हूं।

मेरा समाधान: अधिकांश संपादकों के पास ब्लॉक मोड है। # इसका उपयोग उन सभी पंक्तियों में # जोड़ने के लिए करें जिन पर आप टिप्पणी करना चाहते हैं। क्या बड़ी बात है...

नोटपैड का उदाहरण:

बनाने के लिए: Alt - mousedrag नीचे, # दबाएँ।

हटाने के लिए: Alt-mousedrag डाउन, शिफ्ट-राइट एरो, डिलीट करें।


8
उपयोगकर्ता सबसे अधिक संभावना टर्मिनल में है। एक माउस वातावरण ग्रहण नहीं कर सकता।
गैरी

क्या वे अभी भी मौजूद हैं? मैं आमतौर पर चित्रमय मोड में संपादित करता हूं और vi का उपयोग करके वापस पेस्ट करता हूं, यह एक आसान समाधान होगा।
Rusty75

2

Sunny256 द्वारा स्वीकृत उत्तर में यहाँ-डॉक्टर चाल पर भिन्नता टिप्पणियों के लिए पर्ल कीवर्ड का उपयोग करना है। यदि आपकी टिप्पणियां वास्तव में किसी प्रकार के प्रलेखन हैं, तो आप टिप्पणी ब्लॉक के अंदर पर्ल सिंटैक्स का उपयोग करना शुरू कर सकते हैं, जो आपको इसे अच्छी तरह से स्वरूपित प्रिंट करने की अनुमति देता है, इसे मैन-पेज में परिवर्तित कर सकता है, आदि।

जहां तक ​​शेल का संबंध है, आपको केवल इसके 'END'साथ बदलने की आवश्यकता है '=cut'

echo "before comment"
: <<'=cut'
=pod

=head1 NAME
   podtest.sh - Example shell script with embedded POD documentation

etc.

=cut
echo "after comment"

(" शेल स्क्रिप्ट में एम्बेडिंग प्रलेखन " पर पाया गया )


0

एक अन्य विधा है: यदि आपका संपादक कोई ब्लॉक टिप्पणी विकल्प नहीं है,

  1. संपादक का दूसरा उदाहरण खोलें (उदाहरण के लिए फ़ाइल => नई फ़ाइल ...)
  2. जिस PREVIOUS फ़ाइल पर आप काम कर रहे हैं, उसमें से केवल उस भाग का चयन करें, जिस पर आप टिप्पणी करना चाहते हैं
  3. नई अस्थायी फ़ाइल की विंडो में इसे कॉपी और पेस्ट करें ...
  4. एडिट मेनू खोलें, '' n '' को बदलने के लिए REPLACE और इनपुट को स्ट्रिंग के रूप में चुनें।
  5. इनपुट स्ट्रिंग की जगह: '\ n #'
  6. बटन दबाएं 'सभी को बदलें'

किया हुआ

यह किसी भी संपादक के साथ काम करता है


0

मुझे एक सिंगल लाइन खुली और बंद पसंद है:

if [ ]; then ##
    ...
    ...
fi; ##

'##' मुझे ब्लॉक कमेंट की शुरुआत और अंत आसानी से खोजने में मदद करता है। मैं '##' के बाद एक नंबर चिपका सकता हूं अगर मुझे उनमें से एक गुच्छा मिला है। टिप्पणी को बंद करने के लिए, मैं '[]' में एक '1' चिपका देता हूं। मैं कुछ मुद्दों से भी बचता हूं जो मैंने टिप्पणी ब्लॉक में एकल-उद्धरणों के साथ किए हैं।

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