Рейтинг:3

не удалось добавить выход в этот цикл

флаг ag

Однако нашел этот интересный скрипт, который рисует снег внутри вашего терминала.... Я хотел бы иметь возможность в любое время ввести «q», чтобы выйти из цикла. Это то, что у меня есть;

 

 LINES=$(tput строк)
COLUMNS=$(tput cols)
 
объявить -A снежинки
объявить -A последние хлопья
 
чистый

функция move_flake() {    

я = "$1"
 
если [ "${снежинки[$i]}" = "" ] || [ "${снежинки[$i]}" = "$LINES" ]; тогда
снежинки[$i]=0
еще
если [ "${lastflakes[$i]}" != "" ]; тогда
printf "\033[%s;%sH \033[1;1H" ${последние хлопья[$i]} $i
фи
фи
 
printf "\033[%s;%sH*\033[1;1H" ${снежинки[$i]} $i
 
последние хлопья[$i]=${снежинки[$i]}
снежинки[$i]=$((${снежинки[$i]}+1))
}
 
пока :
делать
    
i=$(($СЛУЧАЙНЫЙ % $СТОЛБЦ))
 
move_flake $i

для x в "${!lastflakes[@]}"
делать
move_flake "$x"
сделано
 
спать 0,1
сделано

это то, что я пытался добавить;

echo "Введите 'q', чтобы выйти"
while read -n1 -r -p "Хотите выйти из скрипта?"
делать
    если [[ $REPLY == q ]];
    тогда
        сломать;
    еще
        #что бы ни
    фи
сделано

добавил его внутри функции, но запрашивал только «q» в самом начале. затем попытался добавить реальный скрипт в цикл выхода и рисует только снежинку, а затем снова спрашивает, хочу ли я выйти.... Любая идея, как заставить это работать?

terdon avatar
флаг cn
Почему бы вам просто не использовать Ctrl + C для выхода?
Рейтинг:5
флаг jp

Вы можете сделать это так в оболочке бить: Заменить спать команда с читать команда, которая имеет тайм-аут, и пусть пока проверьте свой 'к'. Видеть

помогите прочитать | меньше

Вот моя версия твоего снежного шоу,

#!/бин/баш

LINES=$(tput строк)
COLUMNS=$(tput cols)

объявить -A снежинки
объявить -A последние хлопья
 
чистый

функция move_flake() {    

я = "$1"
 
если [ "${снежинки[$i]}" = "" ] || [ "${снежинки[$i]}" = "$LINES" ]; тогда
снежинки[$i]=0
еще
если [ "${lastflakes[$i]}" != "" ]; тогда
printf "\033[%s;%sH \033[1;1H" ${последние хлопья[$i]} $i
фи
фи
 
printf "\033[%s;%sH*\033[1;1H" ${снежинки[$i]} $i
 
последние хлопья[$i]=${снежинки[$i]}
снежинки[$i]=$((${снежинки[$i]}+1))
}
 
в то время как [ "$ans" != "q" ]
делать
    
 i=$(($СЛУЧАЙНЫЙ % $СТОЛБЦ))
 
 move_flake $i

 для x в "${!lastflakes[@]}"
 делать
  move_flake "$x"
 сделано
 читать -sn 1 -t 0,1 анс
сделано
terdon avatar
флаг cn
Ха! Я не знал, что у `read` bash есть опция тайм-аута. Хороший!
sudodus avatar
флаг jp
@terdon, да, хороший вариант. Я использовал его несколько раз в своих скриптах :-)
WinEunuuchs2Unix avatar
флаг in
@terdon Мне тоже придется больше читать о команде `read`: P
Erniemenendez avatar
флаг ag
ФАНТАСТИКА!!! Большое тебе спасибо!!!!
sudodus avatar
флаг jp
Добро пожаловать, @Erniemenendez :-) Мне понравился экран со снегом, я привык к подготовке к зиме... сделал его полностью полноэкранным с помощью `xterm`: `xterm -fullscreen -e bash -c 'sleep 1;./snow' ` из каталога, в который я поместил скрипт. Если дать снегу растаять на земле, получится простая, но приятная заставка.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.