2014-12-01 6 views
4

Здесь у меня есть бинарные часы, которые выводят двоичные часы в 16 разных цветах, и я пытаюсь заставить его появляться в центре экрана, но не могу сделать это. Если у вас есть предложения, как это сделать, пожалуйста, дайте мне знать. благодаряКак создать сценарий в середине экрана?

color=("0;30" "0;31" "0;32" "0;33" "0;34" "0;35" "0;36" "0;37" "1;30" "1;31" "1;32" "1;33" "1;34" "1;35" "1;36" "1;37") 
color2=${#color[*]} 
while true; 
do 
clear 
echo -ne '\e['${color[$((RANDOM%color2))]}m 
hour=$(date +%H) 
minute=$(date +%M) 
second=$(date +%S) 
hour_binary=$(echo "ibase=10;obase=2;$hour" | bc) 
minute_binary=$(echo "ibase=10;obase=2;$minute" | bc) 
second_binary=$(echo "ibase=10;obase=2;$second" | bc) 
printf "%06d\n" "$hour_binary" 
printf "%06d\n" "$minute_binary" 
printf "%06d" "$second_binary" 
sleep 1 
done 
+1

Вы имеете в виду центр окна терминала? Что вы подразумеваете под экраном? – redhotspike

+1

Да в центре окна терминала – user3504970

+1

Возможный дубликат [Центр выравнивания текста - сценарий оболочки] (http://stackoverflow.com/questions/12471951/text-alignment-center-shell-script) –

ответ

2

Что бы сделать:

cols=$(tput cols) 
lines=$(tput lines) 
numcols=$(((cols-6)/2)) 
numlines=$((lines/2)) 

while true; do 
    clear 
    tput setaf $((RANDOM%8)) 
    hour=$(date +%H) 
    minute=$(date +%M) 
    second=$(date +%S) 
    hour_binary=$(echo "ibase=10;obase=2;$hour" | bc) 
    minute_binary=$(echo "ibase=10;obase=2;$minute" | bc) 
    second_binary=$(echo "ibase=10;obase=2;$second" | bc) 
    tput cup $numlines $numcols 
    printf "%06d\n" "$hour_binary" 
    tput cup $((numlines+1)) $numcols 
    printf "%06d\n" "$minute_binary" 
    tput cup $((numlines+2)) $numcols 
    printf "%06d" "$second_binary" 
    tput cup $((numlines+3)) $numcols 
    sleep 1 
done 

Я заменил жестко закодированные AnSi последовательности с помощью tput для цветов тоже

+1

Способы сказать спасибо это путем голосования вверх/принять ответы;) –

+0

после того, как я добавил заголовок, часы обычно выстраиваются в середине. заголовок немного слева. Как я могу сделать их централизованными, как в Microsoft, где вы можете центрировать название. – user3504970

+0

Возможно, понимая, что происходит и читает документацию? –

4

Если вы ссылаетесь к центру окна терминала , получите столбцы и строки окна терминала с помощью:

COLS=$(tput cols) 
ROWS=$(tput lines) 
CLOCKWIDTH=8 #I'm assuming a HH:MM:SS format 
CENTERCOL=$((COLS/2)) 
CENTERCOL=$((CENTERCOL-CLOCKWIDTH)) 
CENTERROW=((ROWS/2)) 

Факс: д затем использовать команду tput, чтобы установить позицию курсора с:

tput cup $CENTERCOL $CENTERROW 

См http://www.cyberciti.biz/tips/spice-up-your-unix-linux-shell-scripts.html для примера с использованием tput и https://www.gnu.org/software/termutils/manual/termutils-2.0/html_chapter/tput_1.html для получения дополнительной информации о команде tput.

+0

Backticks немного обесценились в 2014 году. Подумайте, используя форму '$()' вместо этого, см. Http://mywiki.wooledge.org/BashFAQ/082 –

+0

:(грусть спасибо за головы – redhotspike

Смежные вопросы