2012-09-18 34 views
5

मैं शैल स्क्रिप्ट का उपयोग कर एक सरल कंसोल आधारित स्क्रिप्ट बना रहा हूं। यह मेरे बैश खोल पर चलाया जाएगा यह एक साधारण मेनू आधारित संचालित विकल्प विकल्पों का कुछ सेट है।टेक्स्ट संरेखण केंद्र - खोल स्क्रिप्ट

अब मैं स्क्रीन आकार के आधार पर टेक्स्ट को संरेखित करना चाहता हूं। मैं कैसे स्क्रीन के केंद्र में पाठ संरेखित करते कृपया मुझे Assis

उत्तर

11

अंत में मैं समाधान :)

COLUMNS=$(tput cols) 
title="Hello world!" 
printf "%*s\n" $(((${#title}+$COLUMNS)/2)) "$title" 
+1

यदि आपको एक-लाइनर की आवश्यकता है, जो कमांड लाइन तर्क से इनपुट लेता है: '' printf "% * s \ n" $ (($ (echo $ * | wc -c) + 80)/2)) "$ *" '' ' कमांड लाइन तर्क से इनपुट लेता है, वर्णों की संख्या गिनने के लिए wc का उपयोग करता है, और डिफ़ॉल्ट 80 अक्षरों को औचित्य देता है। – thewisenerd

0

सरल पर्ल समाधान:

perl -pe '$sp = " " x (($ENV{COLUMNS} - length)/2); s/^/$sp/' 
+0

क्या यह शैल-स्क्रिप्ट पर काम करेगा? –

+0

इसे देखने का प्रयास करें। बस अपनी स्क्रिप्ट में लाइन जोड़ें, पाठ को पाइप करने के लिए इसे पाइप करें ('जेनरेट टेक्स्ट | perl ...') या इसे तर्क के रूप में उपयोग करें ('perl ... text.txt') – choroba

+0

अंततः मुझे मिला समाधान: COLUMNS = $ (ट्यूट कॉल) शीर्षक = "हैलो वर्ल्ड!" printf "% * s \ n" $ (($ {# शीर्षक} + $ COLUMNS)/2)) "$ शीर्षक" –

5

बीएसडी आधारित सिस्टम पर पाया , मैकोज़ सहित, fmt उपयोगिता में -c ध्वज केंद्र टेक्स्ट में है।

echo $text | fmt -c -w $COLUMNS 

दुर्भाग्य से, जीएनयू fmt एक असंगत -c झंडा और केंद्रित के लिए कोई विकल्प नहीं है।

संबंधित मुद्दे