कभी-कभी मुझे पाठ लिखने की आवश्यकता होती है और फिर उस पाठ को दूसरे आदेश में पाइप कर देता है। मेरा सामान्य वर्कफ़्लो कुछ इस तरह से जाता है:
vim
# I edit and save my file as file.txt
cat file.txt | pandoc -o file.pdf # pandoc is an example
rm file.txt
मुझे यह बोझिल लगता है और बैश स्क्रिप्टिंग सीखने की कोशिश करता हूं, मैं एक कमांड लिखकर प्रक्रिया को बहुत सरल बनाना चाहता हूं जो एक एडिटर को खोलती है और जब एडिटर एडिटर के आउटपुट को स्टडआउट करने के लिए पाइप को बंद कर देता है। तब मैं कमांड चलाने में सक्षम था quickedit | pandoc -o file.pdf
।
मुझे यकीन नहीं है कि यह कैसे काम करेगा। मैंने पहले से ही कुछ जोड़ के ऊपर सटीक वर्कफ़्लो का पालन करके इसे स्वचालित करने के लिए एक फ़ंक्शन लिखा था। यह फ़ाइल नाम के रूप में कार्य करने के लिए एक यादृच्छिक स्ट्रिंग उत्पन्न करता है और जब फ़ंक्शन को लागू किया जाता है तो उसे विम करने के लिए पास करता है। जब उपयोगकर्ता फ़ाइल को सहेजकर विम से बाहर निकलता है, तो फ़ंक्शन फ़ाइल को कंसोल पर प्रिंट करता है और फिर फ़ाइल को हटा देता है।
function quickedit {
filename="$(cat /dev/urandom | env LC_CTYPE=C tr -cd 'a-f0-9' | head -c 32)"
vim $filename
cat $filename
rm $filename
}
# The problem:
# => Vim: Warning: Output is not to a terminal
मुझे जल्द ही जो समस्या आई वह यह है कि जब मैं quickedit | command
विम जैसा कुछ करता हूं तो उसे संपादक के रूप में इस्तेमाल नहीं किया जा सकता क्योंकि सभी आउटपुट पाइप के लिए विवश हैं।
मुझे आश्चर्य हो रहा है कि क्या इसमें कोई वर्कअराउंड है, ताकि मैं अपने quickedit
फ़ंक्शन के आउटपुट को पाइप कर सकूं । उप-विषयक विकल्प एक अलग संपादक को आग देना है, उदात्त पाठ कहते हैं, लेकिन मैं वास्तव में टर्मिनल में रहना चाहता हूं।
mktemp
करना चाहिए ।
:w !pandoc -o file.pdf
? (नोट: बीच का स्थानw
और!
आवश्यक है।)