GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara saya tidur selama satu milidetik di bash atau ksh

Solusi 1:

Dokumentasi untuk sleep perintah dari coreutils mengatakan:

Implementasi historis dari sleep mengharuskan angka tersebut menjadi bilangan bulat, dan hanya menerima satu argumen tanpa sufiks. Namun, GNU sleep menerima sembarang angka floating point. Lihat Titik mengambang.

Karenanya Anda dapat menggunakan sleep 0.1 , sleep 1.0e-1 dan argumen serupa.

Solusi 2:

Bash memiliki "loadable" sleep yang mendukung pecahan detik, dan menghilangkan overhead dari perintah eksternal:

$ cd bash-3.2.48/examples/loadables
$ make sleep && mv sleep sleep.so
$ enable -f sleep.so sleep

Lalu:

$ which sleep
/usr/bin/sleep
$ builtin sleep
sleep: usage: sleep seconds[.fraction]
$ time (for f in `seq 1 10`; do builtin sleep 0.1; done)
real    0m1.000s
user    0m0.004s
sys     0m0.004s

Kelemahannya adalah bahwa loadable mungkin tidak disediakan dengan bash Anda biner, jadi Anda perlu mengkompilasinya sendiri seperti yang ditunjukkan (walaupun pada Solaris tidak sesederhana di atas).

Pada bash-4.4 (September 2016) semua loadable sekarang dibuat dan diinstal secara default pada platform yang mendukungnya, meskipun dibuat sebagai file objek bersama yang terpisah, dan tanpa .so akhiran. Kecuali distro/OS Anda telah melakukan sesuatu yang kreatif (sayangnya RHEL/CentOS 8 build bash-4.4 dengan ekstensi yang dapat dimuat sengaja dihapus), Anda seharusnya dapat melakukan:

[ -z "$BASH_LOADABLES_PATH" ] &&
  BASH_LOADABLES_PATH=$(pkg-config bash --variable=loadablesdir 2>/dev/null)  
enable -f sleep sleep

(Halaman manual menyiratkan BASH_LOADABLES_PATH diatur secara otomatis, saya menemukan ini tidak terjadi pada distribusi resmi pada 4.4.12. Jika dan ketika disetel dengan benar, Anda hanya memerlukan enable -f filename commandname sesuai kebutuhan.)

Jika itu tidak cocok, hal termudah berikutnya adalah membangun atau mendapatkan sleep dari GNU coreutils, ini mendukung fitur yang diperlukan. POSIX sleep perintah minimal, versi Solaris yang lebih lama hanya menerapkan itu. Solaris 11 sleep benar mendukung pecahan detik.

Sebagai upaya terakhir, Anda dapat menggunakan perl (atau skrip lain yang harus Anda tangani) dengan peringatan bahwa menginisialisasi penerjemah mungkin sebanding dengan waktu tidur yang diinginkan:

$ perl -e "select(undef,undef,undef,0.1);"
$ echo "after 100" | tclsh

Solusi 3:

Tidur menerima angka desimal sehingga Anda dapat memecahnya seperti ini:

1/2 detik

 sleep 0.5

1/100 detik

sleep 0.01

Jadi untuk satu milidetik yang Anda inginkan

sleep 0.001

Solusi 4:

Coba ini untuk menentukan akurasi:

    time sleep 0.5      # 500 milliseconds (1/2 of a second)
    time sleep 0.001    # 1 millisecond (1/1000 of a second)
    time sleep 1.0      # 1 second (1000 milliseconds)

Kombinasi solusi mr.spuratic dan solusi coles.

Solusi 5:

Anda cukup menggunakan usleep . Dibutuhkan mikrodetik (=1e-6 detik) sebagai parameter, jadi untuk tidur 1 milidetik Anda akan memasukkan:

usleep 1000

Linux
  1. Bagaimana Cara Menentukan Pelengkapan Otomatis Khusus Untuk Perintah Tertentu?

  2. Bagaimana Cara Membuat Lingkungan Shell yang Bersih Untuk Penggunaan Sementara?

  3. Bagaimana Cara Menonaktifkan Alias ​​​​Di Bash Untuk Satu Perintah??

  1. Bagaimana Cara Mendeteksi Bash>=4.0?

  2. Bagaimana cara menjalankan beberapa perintah latar belakang di bash dalam satu baris?

  3. Bagaimana cara mengubah direktori di Git Bash dengan Git untuk Windows?

  1. Cara menggunakan perintah riwayat Bash

  2. Bagaimana Cara Men-debug Skrip Bash?

  3. Cara grep untuk unicode � dalam skrip bash