Tanpa sadar menjalankan loop tak terbatas di terminal


9

Saya menyalin kode di bawah ini dari beberapa sumber acak ke terminal saya dan berlari:

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

Kode ini menunjukkan jam yang berjalan di sudut kanan atas terminal. Cuplikan bekerja dengan sangat baik dan persis melakukan apa yang saya inginkan, tetapi sekarang saya hanya ingin mengakhiri lingkaran ini dan menyingkirkan jam.

Saya juga perlu memahami kode di atas. Saya punya beberapa ide, karena saya tahu apa yang tputdilakukan perintah, tetapi masih ada banyak titik yang saya tidak dapat hubungkan.


1
Anda bisa menjalankan jobssesi untuk mendaftar pekerjaan latar belakang aktif dan kemudian meletakkannya di latar depan dengan mengetik fg <job number>. Setelah ketik Ctrl + C untuk menghentikan loop tak terbatas ini. Skenario ini hanya berfungsi di terminal yang menjalankan cuplikan.
Yurij Goncharuk

Terima kasih banyak, cara yang sangat bersih untuk menghilangkan loop. Ini harus menjadi jawaban yang diterima.
Kartik Chauhan

Sama sama! Saya menempatkannya sebagai jawaban di bawah.
Yurij Goncharuk

1
Perhatikan bahwa hanya menutup jendela terminal juga akan menghentikan semua pekerjaan yang berjalan yang melekat padanya.
trlkly

Anda punya dua pertanyaan di sini. Bisakah Anda membagi 2, ke pertanyaan baru.
ctrl-alt-delor

Jawaban:


15

Anda dapat menjalankan jobsperintah di sesi Anda untuk membuat daftar pekerjaan latar belakang aktif dan kemudian meletakkannya di latar depan dengan mengetik fg <job number>. Kemudian ketik Ctrl+ Cuntuk menghentikan loop tak terbatas ini.

Skenario ini hanya berfungsi di terminal yang menjalankan cuplikan.


Penjelasan:

tput sc - Menyimpan posisi kursor.

tput cup 0 $(($(tput cols)-29))- Pindahkan kursor ke posisi 0sumbu Y dan (count of screen columns minus 29)sumbu X.

date - cukup cetak tanggal sekarang.

tput rc - mengembalikan posisi kursor.

while sleep 1; ... do ... ; done - loop dengan penundaan 1 detik.

Ketik help whileuntuk tahu lebih banyak tentang whileloop in shell dan ikuti ke man 1 tput atau tldp tput doc untuk mengetahui cara kerja tput.


Saya masih ingin tahu bagaimana kode melakukan apa yang dilakukannya.
Kartik Chauhan

@KartikChauhan saya memberikan beberapa penjelasan juga.
Yurij Goncharuk

@KartikChauhan Kamu benar! Terima kasih! Saya baru saja memperbaiki ini.
Yurij Goncharuk

3
kill %1(atau nomor yang berbeda jika ada banyak pekerjaan) adalah alternatif untuk fg+Ctrl-C
Roman Odaisky
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.