मल्टी-लाइन बैश कमांड में टिप्पणियां


32

यह एकल-कमांड BASH स्क्रिप्ट फ़ाइल को समझना मुश्किल है, इसलिए मैं प्रत्येक क्रिया के लिए एक टिप्पणी लिखना चाहता हूं:

echo 'foo'     \
| sed 's/d/a/' \
| sed 's/e/b/' \
| sed 's/f/c/' \
> myfile

(sed केवल एक उदाहरण है, वास्तव में यह ग्रीप्स और trs और awks का मिश्रण है)

मुझे डुप्लिकेट लाइनों से नफरत होगी, या प्रत्येक टिप्पणी उस लाइन से बहुत दूर होगी जिस पर यह लागू होता है।
लेकिन उसी समय BASH "इन-लाइन" टिप्पणियों की अनुमति नहीं देता है।

इस समस्या को हल करने का कोई सुंदर तरीका?

जवाबों:


51

इसके बाद टिप्पणियों के साथ लाइन के अंत में पाइप लगाएं:

$ echo 'foo' |
sed 's/f/a/' | # change first f to a
sed 's/o/b/' | # change first o to b
sed 's/o/c/'   # change second o to c
abc

समझ में आता है, क्योंकि पाइप से कुछ का पालन करने की उम्मीद की जाती है
MrCholo

15

यदि आप इस प्रश्न पर टिप्पणी करते समय एक गैर- पाइपलाइन बहुभाषी कमांड की तलाश करते हैं:

$ echo 'foo' |
sed -e 's/f/a/' `: # change first f to a` \
    -e 's/o/b/' `: # change first o to b` \
    -e 's/o/c/' `: # change second o to c`

जब तक आप वास्तव में कुछ टिप्पणी नहीं कर रहे हैं जैसे टिप्पणी को स्वचालित करना, मैं पाइप के लिए मिकेल के जवाब पर इसे पसंद करने का एक कारण नहीं देख सकता, लेकिन अगर आप वास्तव में चाहते थे:

$ echo 'foo' |
sed 's/f/a/' | `: # change first f to a` \
sed 's/o/b/' | `: # change first o to b` \
sed 's/o/c/'   `: # change second o to c`

या:

$ echo 'foo' |
sed 's/f/a/' `: # change first f to a` |
sed 's/o/b/' `: # change first o to b` |
sed 's/o/c/' `: # change second o to c`

स्रोत: http://unix.derkeiler.com/Newsgroups/comp.unix.solaris/2005-07/0991.html


10

खैर, मैं इस तरह से पसंद करते हैं,

echo 'foo' | {
  # change first f to a
  # you can add more lines of comment on the command options
  sed 's/f/a/'
} | {
  # change first o to b
  sed 's/o/b/'
} | {
  # change second o to c
  sed 's/o/c/' 
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.