2012-09-18 10 views
5

シェルスクリプトを使用して簡単なコンソールベースのスクリプトを作成しています。これはbashシェルで実行されます シンプルなメニューベースの駆動型ディスプレイがいくつかのオプションを表示します。テキストアラインメントセンター - シェルスクリプト

ここでは、画面サイズに応じてテキストを中央揃えにしたいと考えています。 は、どのように私は、画面の中央にテキストを揃えるか、私に

答えて

11

最後に、私は解決策を見つけた:)

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

1行が必要な場合は、コマンドライン引数から入力を受け取ります。 '' 'printf"%* s \ n "$(($(echo $ * | wc -c)+ 80)/ 2 )) "$ *" '' ' は、コマンドライン引数からの入力を受け取り、wcを使用して文字数をカウントし、デフォルトで80文字になります。 – thewisenerd

0

単純なPerlソリューションアシスしてください:?BSDベースのシステムで

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

シェルスクリプトで動作しますか? –

+0

見てみてください。 ( 'generate-text | perl ...')、それを引数として使う( 'perl ... text.txt') – choroba

+0

最後に、私はあなたのスクリプトにその行を追加しました。ソリューション: COLUMNS = $(tput cols) title = "Hello world!" printf "%* s \ n" $(($ {#title} + $ COLUMNS)/ 2)) "$ title" –

5

をMacOSを含むfmtユーティリティは、テキストを中央に揃えるために-cフラグを持っています。

echo $text | fmt -c -w $COLUMNS 

残念ながら、GNU fmtは互換性のない-cフラグとセンタリングのためノー選択肢を持っています。