2012-09-18 49 views
5

Tôi đang tạo một kịch bản lệnh dựa trên giao diện điều khiển đơn giản bằng cách sử dụng shell script. Nó sẽ chạy trên bash shell của tôi Trình đơn đơn giản của nó dựa trên màn hình hiển thị một số tùy chọn.Trung tâm căn chỉnh văn bản - shell script

Bây giờ tôi muốn căn giữa căn chỉnh văn bản tùy thuộc vào kích thước màn hình. Làm thế nào để sắp xếp các văn bản ở trung tâm của màn hình hãy Assis tôi

Trả lời

11

Cuối cùng tôi tìm thấy giải pháp :)

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

nếu bạn cần một lớp lót, nhập dữ liệu từ các đối số dòng lệnh: '' 'printf"% * s \ n "$ ((($ (echo $ * | wc -c) + 80)/2)) "$ *" '' ' lấy đầu vào từ các đối số dòng lệnh, sử dụng wc để đếm số ký tự và mặc định là 80 ký tự. – thewisenerd

0

Simple giải pháp Perl:

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

nó có hoạt động trên shell-script không? –

+0

Hãy thử xem. Chỉ cần thêm dòng vào kịch bản lệnh của bạn, đường ống văn bản được căn giữa vào nó ('generate-text | perl ...') hoặc sử dụng nó như một đối số ('perl ... text.txt') – choroba

+0

Cuối cùng tôi tìm thấy giải pháp: COLUMNS = $ (tput cols) title = "Xin chào thế giới!" printf "% * s \ n" $ ((($ {# title} + $ COLUMNS)/2)) "$ title" –

5

Trên các hệ thống BSD-based , bao gồm MacOS, tiện ích fmt có cờ -c để căn giữa văn bản.

echo $text | fmt -c -w $COLUMNS 

Thật không may, GNU fmt có cờ c không tương thích và không thay thế cho định tâm.

Các vấn đề liên quan