Бессознательно запустил бесконечный цикл в терминале

9

Я скопировал приведенный ниже код из некоторого случайного источника в мой терминал и запустил:

while sleep 1;
  do tput sc;
  tput cup 0 $(($(tput cols)-29));
  date;
  tput rc;
done &

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

Кроме того, мне нужно понять приведенный выше код. У меня есть идея, так как я знаю, что tputделает команда, но все же есть много точек, с которыми я не могу соединиться.

Картик Чаухан
источник
1
Вы можете запустить jobsв своем сеансе список активных фоновых заданий, а затем вывести его на передний план, набрав fg <job number>. После нажатия Ctrl + C, чтобы остановить этот бесконечный цикл. Этот сценарий работает только в терминале, который запускает сниппет.
Юрий Гончарук
Большое спасибо, очень чистый способ избавиться от петли. Это должно стать принятым ответом.
Картик Чаухан
Добро пожаловать! Я поставил это как ответ ниже.
Юрий Гончарук
1
Обратите внимание, что простое закрытие окна терминала также завершит все запущенные задания, связанные с ним.
trlkly
У вас есть два вопроса здесь. Можете ли вы разделить 2-й, на новый вопрос.
ctrl-alt-delor

Ответы:

15

Вы можете запустить jobsкоманду в своем сеансе, чтобы вывести список активных фоновых заданий, а затем поместить их на передний план, набрав fg <job number>. Затем нажмите Ctrl+, Cчтобы остановить этот бесконечный цикл.

Этот сценарий работает только в терминале, который запускает сниппет.


Объяснение:

tput sc сохранить позицию курсора.

tput cup 0 $(($(tput cols)-29))- переместить курсор в положение 0оси Y и оси (count of screen columns minus 29)X.

date просто напечатать текущую дату.

tput rc - восстановить позицию курсора.

while sleep 1; ... do ... ; done - петля с задержкой в ​​1 секунду.

Введите, help whileчтобы узнать больше о whileцикле в оболочке, и следуйте инструкциям man 1 tput или tldp tput doc, чтобы узнать, как работает tput.

Юрий Гончарук
источник
Я все еще хотел бы знать, как код сделал то, что сделал.
Картик Чаухан
@KartikChauhan Я также дал некоторые объяснения.
Юрий Гончарук
@KartikChauhan Вы правы! Спасибо! Я только что исправил это.
Юрий Гончарук
3
kill %1(или другое число, если есть несколько рабочих мест) является альтернативой fg+Ctrl-C
Роман Одайский