आप अपने तरीके को थोड़ा अनुकूलित कर सकते हैं। cowsayसीधे पाइपिंग के बजाय , एक परिसीमन वर्ण तक आउटपुट पढ़ें, उस आउटपुट को भेजें cowsay, फिर हर कमांड के बाद उस वर्ण को प्रिंट करें:
exec > >(while IFS= read -d '' -r line; do if [[ -n $line ]]; then echo; printf "%s\n" "$line" | cowsay; fi; done)
PROMPT_COMMAND='printf "\0"'
यहाँ, मैं ASCII NUL चरित्र का उपयोग कर रहा हूँ। आप कुछ और उपयोग कर सकते हैं जो कमांड आउटपुट में दिखाई देने की संभावना नहीं है।
यह प्रॉम्प्ट के बाद प्रिंट करेगा, इसलिए आउटपुट बदसूरत होगा:
$ export LC_ALL=C
$ exec > >(while IFS= read -d '' -r line; do if [[ -n $line ]]; then echo; printf "%s\n" "$line" | cowsay; fi; done)
$ PROMPT_COMMAND='printf "\0"'
$ ls
$
______________________________________
/ Desktop Documents Downloads Music \
| Pictures Public Templates Videos
\ examples.desktop /
--------------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
$ echo foo
$
______
< foo >
------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
ध्यान दें कि यह किसी भी कमांड को तोड़ देगा जो जटिल आउटपुट की कोशिश करता है या इसमें एक टेक्स्ट यूजर इंटरफेस है (थिंक कमांड लाइन एडिटर, पेजर आदि)।
आप पहले से ही जानते हैं कि क्या exec > >(...)करता है, प्रक्रिया प्रतिस्थापन में हिस्सा है:
while IFS= read -d '' -r line; do ... done: यह ASCII NUL चरित्र द्वारा सीमांकित डेटा पढ़ने के लिए एक बहुत ही सामान्य मुहावरा है:
IFS= IFS को रिक्त स्ट्रिंग में सेट करता है, जो क्षेत्र विभाजन को निष्क्रिय करता है
-rविशेष रूप से इनपुट में readउपचार से रोकता है \(इसलिए, \nउदाहरण के लिए, के रूप में पढ़ा जाता है \nऔर न्यूलाइन वर्ण में परिवर्तित नहीं होता है)।
-d ''readNUL वर्ण तक पढ़ने का तरीका बताने का तरीका है
तो पूरी बात एनयूएल-सीमांकित वर्गों में इनपुट पर लूप करती है, जितना संभव हो उतना इनपुट की सामग्री को संरक्षित करते हुए।
if [[ -n $line ]]; then ... fi; done - यदि अभी तक पढ़ा गया इनपुट खाली नहीं है तो ही कार्य करें।
echo; printf "%s\n" "$line" | cowsay;- एक प्रमुख खाली लाइन को प्रिंट करें, ताकि गाय का उत्पादन शीघ्रता से न टकराए, और फिर गाय को अब तक पढ़े गए इनपुट को भेजें। printfसे अधिक विश्वसनीय और सुरक्षित है echo।
-nध्वज का उपयोग करनाcowsayउपयोगी है; यह इसे व्हाट्सएप का संरक्षण करता है।