school prac: “screensaver”

0

Ainda trabalhando na minha Prac. Obrigado pela ajuda da minha pergunta anterior.

estamos encarregados de criar um "protetor de tela" para uma janela de terminal.

O que estou tentando fazer é aguardar uma tecla pressionada, gerar aleatoriamente um número que, em seguida, seleciona uma das várias imagens de arte ASCII que serão adicionadas ao arquivo.

O que eu tenho até agora funciona, mas só vai regenerar outro número depois que eu pressionar uma tecla. Eu estou querendo que ele continue gerando um número até que eu pressione uma tecla e então me tire do loop.

while read -r -n1 key
do
    num=$(awk -v min=5 -v max=10 'BEGIN{srand(); print int(min+rand()*(max- 
min+1))}')
echo $num
case $num in
1)
    echo "hello"
    sleep 5
    ;;
2)
    echo "bye"
    sleep 5
    ;;
***and so on***
esac
done

Eu tenho certeza que esqueci de algo simples. esteve nesta cadeira por mais de 7 horas hoje.

muito obrigado

EDITAR: achei isso Saída algo (em um loop) até uma tecla é pressionada

e o adaptaram de acordo, mas eu não obtenho um cursor de volta até que o último sono 5 tenha terminado a execução.

#!/bin/bash

while true; do

num=$(awk -v min=5 -v max=10 'BEGIN{srand(); print int(min+rand()*(max-min+1))}')

case $num in
  1)
    echo "hello"
    sleep 5
    ;;

  *)
    echo "whats going on 'ere?"
    sleep 5 &
    wait $!
    ;;
esac


# In the following line -t for timeout, -N for just 1 character
  read -t 0.25 -N 1 input
  if [[ $input = "q" ]] || [[ $input = "Q" ]]; then
# The following line is for the prompt to appear on a new line.
    echo
    break 
  fi
done
    
por random australian 01.05.2018 / 07:55

1 resposta

0

Entendi. Acabou com isso

#!/bin/bash
tput civis
while true; do

num=$(awk -v min=5 -v max=10 'BEGIN{srand(); print int(min+rand()*(max-min+1))}')

case $num in
  1)
    clear
    cat ./s0.file
    sleep 3
    ;;
....
  *)
    clear
    cat ./s9.file
    sleep 3
    ;;
esac 


# In the following line -t for timeout, -N for just 1 character
  read -t 0.25 -N 1 input
  if [[ $input = " " ]] || [[ $input = " " ]]; then
# The following line is for the prompt to appear on a new line.
    echo
    break 
  fi
done
tput cnorm
    
por 02.05.2018 / 03:14

Tags