Apakah ada alternatif untuk perintah batas waktu di Mac OSx. Persyaratan dasarnya adalah saya dapat menjalankan perintah untuk jangka waktu tertentu.
misalnya:
timeout 10 ping google.com
Program ini menjalankan ping selama 10 detik di Linux.
Apakah ada alternatif untuk perintah batas waktu di Mac OSx. Persyaratan dasarnya adalah saya dapat menjalankan perintah untuk jangka waktu tertentu.
misalnya:
timeout 10 ping google.com
Program ini menjalankan ping selama 10 detik di Linux.
Jawaban:
Kamu bisa memakai
brew install coreutils
Dan kemudian kapan pun Anda membutuhkan waktu tunggu, gunakan
gtimeout
..sebagai gantinya. Untuk menjelaskan mengapa berikut cuplikan dari bagian Homebrew Caveats:
Peringatan
Semua perintah telah diinstal dengan awalan 'g'.
Jika Anda benar-benar perlu menggunakan perintah ini dengan nama normalnya, Anda dapat menambahkan direktori "gnubin" ke PATH Anda dari bashrc seperti:
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
Selain itu, Anda dapat mengakses halaman manual mereka dengan nama normal jika Anda menambahkan direktori "gnuman" ke MANPATH Anda dari bashrc Anda juga:
MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"
ln -s /usr/local/bin/gtimeout /usr/local/bin/timeout
hanya mengaktifkan satu perintah (solusi alias berfungsi untuk penggunaan CLI interaktif, tetapi tidak saat dipanggil dari skrip bash).
brew install coreutils
, dan timeout
perintah tersedia tanpa awalan.
Pendekatan sederhana lain yang bekerja cukup banyak lintas platform (karena menggunakan perl yang hampir ada di mana-mana) adalah ini:
function timeout() { perl -e 'alarm shift; exec @ARGV' "$@"; }
Tersangkut dari sini: https://gist.github.com/jaytaylor/6527607
Alih-alih meletakkannya dalam sebuah fungsi, Anda bisa meletakkan baris berikut dalam sebuah skrip, dan itu akan bekerja juga:
perl -e 'alarm shift; exec @ARGV' "$@";
atau versi yang memiliki bantuan / contoh bawaan:
#!/usr/bin/env bash
function show_help()
{
IT=$(cat <<EOF
Runs a command, and times out if it doesnt complete in time
Example usage:
# Will fail after 1 second, and shows non zero exit code result
$ timeout 1 "sleep 2" 2> /dev/null ; echo \$?
142
# Will succeed, and return exit code of 0.
$ timeout 1 sleep 0.5; echo \$?
0
$ timeout 1 bash -c 'echo "hi" && sleep 2 && echo "bye"' 2> /dev/null; echo \$?
hi
142
$ timeout 3 bash -c 'echo "hi" && sleep 2 && echo "bye"' 2> /dev/null; echo \$?
hi
bye
0
EOF
)
echo "$IT"
exit
}
if [ "$1" == "help" ]
then
show_help
fi
if [ -z "$1" ]
then
show_help
fi
#
# Mac OS-X does not come with the delightfully useful `timeout` program. Thankfully a rough BASH equivalent can be achieved with only 2 perl statements.
#
# Originally found on SO: http://stackoverflow.com/questions/601543/command-line-command-to-auto-kill-a-command-after-a-certain-amount-of-time
#
perl -e 'alarm shift; exec @ARGV' "$@";
perl -e 'alarm shift; exec "ping google.com"
?
Alarm clock
pesan ketika pengatur waktu kedaluwarsa, dan menghilangkan ini menjadi berantakan .
function timeout() { perl -e 'use Time::HiRes "ualarm"; ualarm shift; exec @ARGV' "$@"; }
(Perhatikan bahwa itu membutuhkan Perl> = 5,8 menurut perldoc.perl.org/functions/alarm.html )
Anda dapat membatasi waktu eksekusi program apa pun menggunakan perintah ini:
ping -t 10 google.com & sleep 5; kill $!
Paket Timeout dari Ubuntu / Debian dapat dibuat untuk dikompilasi di Mac dan berfungsi. Paket ini tersedia di http://packages.ubuntu.com/lucid/timeout
brew install coreutils
- kemudian gunakan gtimeout
atau setel PATH Anda untuk menggunakan timeout
nama tersebut.
Anda dapat melakukan ping -t 10 google.com >nul
yang> nul menghilangkan output. Jadi alih-alih menampilkan 64 BYTES FROM 123.45.67.8 BLAH BLAH BLAH itu hanya akan menampilkan baris baru kosong sampai batas waktu. Bendera -t dapat diubah menjadi nomor apa pun.