Pertanyaan ini telah mengganggu saya selama beberapa hari, dan inilah posting saya yang telah diedit dengan semua bahan yang telah saya pelajari. Secara khusus, tujuan saya adalah mencapai menampilkan jam di sebelah prompt di BASH. Sama seperti Radu Radeanu yang disebutkan dalam jawabannya, kuncinya adalah menemukan fungsi atau variabel yang dapat terus-menerus menyegarkan command prompt atau menggambar ulang layar, tanpa mengganggu layar Anda atau dengan apa pun yang Anda ketik. Sementara, ini dimungkinkan untuk dicapai dengan loop sementara, seperti yang ditunjukkan oleh G_P, redrawing konstan layar dengan fungsi tput mengacaukan dengan teks apa pun yang ada di layar saya pada saat itu menyegarkan. Saya sudah hampir mencapai apa yang diminta OP dengan memodifikasi sedikit kode yang diposting G_P, tetapi saya masih yakin jawaban Radu adalah yang paling dekat dengan apa yang diinginkan OP. Tanpa basa-basi lagi, inilah beberapa hal yang saya '
# 1, Solusi pilihan saya: Terminal Multiplexer
Terminal multiplexer adalah perangkat lunak yang memungkinkan pemisahan layar terminal menjadi dua atau lebih layar. Secara khusus, saya ingin menarik perhatian ke terminal Byobu. Emulator terminal berbasis ncurses ini, memungkinkan Anda untuk menunjukkan waktu, persentase CPU, memori, dan sejumlah indikator lainnya. Dalam tangkapan layar dari terminal byobu saya, Anda dapat melihat suhu cpu, persentase baterai, kualitas koneksi internet, frekuensi CPU, RAM, tanggal, dan tentu saja waktu. Jika Anda sebagian besar khawatir dengan terus memantau hal-hal ini saat berada di terminal, Byobu adalah cara untuk pergi. Bahkan, saya sudah sangat menyukainya, saya telah mengaturnya untuk memuat secara otomatis saat masuk ke tty. Satu-satunya kekhasan adalah bahwa dalam tty Anda tidak dapat benar-benar menggabungkan jendela terpisah - hanya beralih di antara tab dengan tombol F3 dan F4.
Solusi alternatif yang melibatkan multiplexing windows adalah dengan menggunakan splitvt
, yang membagi layar menjadi dua bagian. Anda dapat menjalankan jam terminal seperti tty-clock
, menggunakan perintah arloji dengan tanggal, atau Anda dapat membuat kode sendiri dengan skrip. Lebih lanjut tentang itu nanti. Di tangkapan layar Anda dapat melihat satu bagian dari pemisahan dengan bash prompt yang normal di atas, dan di bagian bawah Anda dapat melihat skrip berjalan, yang hanya terus-menerus menyegarkan output dari date
perintah dengan clear
perintah.
# 2, While Do Loop dan tput.
Ini mungkin adalah kedekatan dengan apa yang orang yang ingin ajukan ingin lakukan dengan bash.
G_P telah memposting solusi hebat yang melibatkan while do
dan tput
perintah. Namun dalam kode G_P ada dua hal yang saya tidak suka. Satu, jam berada di sebelah kanan prompt, dan dua - karena siklus tidur adalah 1 detik (merujuk ke kode asli di mana ia mengatakan tidur), layar digambar ulang setiap detik, dan itu mengacaukan output saya. Apa yang saya lakukan adalah mengedit bash prompt saya menjadi satu baris lebih rendah dengan operator \ n dan mengubah kode G_P sehingga operator tput akan menempatkan jam tepat di atas prompt, dan menyegarkan setiap 60 detik; yang memungkinkan saya untuk melihat jam dan menit (dan saya tidak benar-benar peduli tentang menit), sementara loop jam tidak mengacaukan layar saya. Pertama, inilah prompt saya:
PS1='${debian_chroot:+($debian_chroot)}\n[*\u@Ubuntu*]\n $(date) :\w\$ '
Dan ini kode modifikasi G_P: enter code here
while sleep 60;do tput sc;tput cup 0 0;date +%R;tput rc;done &
Edit kecil : Saya perhatikan bahwa kode di atas kadang-kadang tidak langsung menampilkan waktu. Ini versi yang lebih baik: Yang while true; do tput sc;tput cup 0 0;date +%R;tput rc; sleep 60; done &
ini menempatkan jam di layar terlebih dahulu, lalu beri tahu bash untuk menjalani siklus tidur 60 detik
Catatan, cangkir tput 0 0 menempatkan jam ke sudut kanan atas layar, tepat di atas prompt saya dan sleep 60 mengubah siklus tidur menjadi 60 detik, karena dengan cara itu saya hanya dapat memonitor jam dan menit daripada setiap detik. Dengan cara ini, teks apa pun yang saya miliki di layar tidak akan terpengaruh, sebagian besar (hanya ketika saya menjalankan perintah, waktu yang sama jam diperbarui).
Baris PS1 sudah ada di profil .bashrc Anda, jadi Anda hanya perlu sedikit men-tweak. Loop while do harus ditambahkan di suatu tempat di file yang sama, lebih disukai pada akhirnya dengan # komentar bahwa ini adalah hal yang Anda tambahkan pada awalnya. Dan jangan lupa untuk selalu mencadangkan file seperti itu kalau-kalau Anda membuat bubu dan harus kembali seperti semula.
# 3, Scripting dan lainnya
Bagian ini hanya untuk mereka yang ingin melihat waktu. Bagi mereka yang ingin terus memantaunya, # 1 dan # 2 adalah pilihan yang lebih disukai.
Jadi seperti yang telah kita lihat while do loop cukup berguna. Inilah cara Anda dapat membuat jam dengan sambil melakukan perintah loop, date, dan sleep.
Tekan kembali / masuk, dan pada dasarnya Anda akan melihat output dari perintah tanggal yang ditampilkan di layar yang dihapus setiap detik. Jika Anda tidak ingin mengetik semua itu setiap waktu, ubah semua ini menjadi skrip:
#!/bin/bash
while true
do
clear;date
sleep 1
done
Sekarang Anda bisa menjalankan skrip itu dengan splitvt dalam satu contoh bash, saat bekerja di yang lain.
Solusi lain adalah watch -n1 date
perintah, yang akan terus menjalankan perintah tanggal dengan periode 1 detik.
Kesimpulan: Saya telah belajar beberapa hal ketika mencoba menemukan jawaban untuk pertanyaan ini, dan saya berharap temuan saya membantu Anda dalam beberapa cara, dan saya berharap saya dapat berkontribusi pada pertanyaan ini. Terminal Byobu IMHO adalah solusi terbaik, tetapi putuskan sendiri, buat riset, dan pilih cara mana yang paling cocok untuk Anda.
Beberapa hal yang saya temukan saat meneliti:
Posting asli saya, solusi minimalis: Edit file ~ / .bashrc Anda. Saya lebih suka mengeditnya dengan nano, jadi
nano ~/.bashrc
Inilah bagian dari file saya sendiri yang diedit:
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\$'
else
# PS1='${debian_chroot:+($debian_chroot)}[*\u@Ubuntu*]:\w\$ '
PS1='${debian_chroot:+($debian_chroot)}[*\u@Ubuntu*]\t:\w\$ '
fi
Setelah pernyataan lain, baris pertama dikomentari dengan # (ini adalah prompt lama saya), sekarang baris kedua adalah yang Anda inginkan, dan khususnya \t
operator. Itu menunjukkan waktu berjalan dalam format 24 jam. Untuk info lebih lanjut, periksa ini . Juga catatan kecil, saya menggunakan barang-barang setelah yang lain, karena saya tidak menggunakan prompt berwarna.
PS: Tolong beri tahu saya jika saya harus menambahkan sesuatu ke jawaban saya atau mengeditnya dengan cara apa pun, tetapi sebagian besar saya percaya ini adalah jawaban yang paling konklusif yang bisa saya buat, dan setidaknya saya pribadi tidak akan menambahkan apa pun baru untuk itu.
$PS1
variabel (prompt) agar memiliki waktu, tetapi saya tidak yakin apakah ada perubahan.