एक चर में पाइप (!) कैसे स्टोर करें?


12

विचार के रूप में इसका इस्तेमाल होगा ... एक कमांड में एक पाइप। उदाहरण के लिए: कहते हैं कि किसी तरह का लंबा रास्ता है जिसे बार-बार पीछे हटाना पड़ता है, उसके बाद पाइप और दूसरे प्रोग्राम का मतलब होता है।

"directory1/directory2/direcotry3/file.dat | less -I "

मैं उस हिस्से को एक चर में संग्रहीत करना चाहता हूं, इसलिए इसका उपयोग इस तरह किया जा सकता है:

r="directory1/directory2/direcotry3 \| less -I -p "
$ cat path1/path2/$r <searchterm>

इसके बजाय, मुझे मिलता है

cat: invalid option -- I
Try `cat --help' for more information.

... जिसका अर्थ है कि पाइप स्पष्ट रूप से काम नहीं करता था।


1
जब आप कर सकते थे eval, आमतौर पर आप एक समारोह बनाते हैं।
फ्रॉस्ट्सचुट्ज़

जवाबों:


21

बैश चर का विस्तार करने के बाद कमांड लाइन को पूरी तरह से फिर से व्याख्या नहीं करता है। इसे लागू करने के लिए, evalसामने रखें:

r="directory1/directory2/direcotry3/file.dat | less -I "
eval "cat path1/path2/$r"

फिर भी, ऐसा करने के लिए और अधिक सुरुचिपूर्ण तरीके हैं (उपनाम, कार्य आदि)।


8

आप कोड और डेटा को मिलाने की कोशिश कर रहे हैं, जो एक अच्छा विचार नहीं है। इसके बजाय, एक फ़ंक्शन को परिभाषित करें जो एक तर्क के रूप में एक फ़ाइल (निर्देशिका?) नाम लेता है, और इसके साथ प्रदर्शित करता है less

view () {
    less -I -p "$2" $1
}

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