Mac OSx'te zaman aşımı komutu için bir alternatif var mı? Temel gereksinim, belirli bir süre boyunca bir komutu çalıştırabilmemdir.
Örneğin:
timeout 10 ping google.com
Bu program Linux'ta 10s için ping çalıştırır.
Yanıtlar:
Kullanabilirsiniz
brew install coreutils
Ve sonra zaman aşımına ihtiyaç duyduğunuzda
gtimeout
..yerine. Neden Homebrew Uyarıları bölümünden bir pasaj olduğunu açıklamak için:
Uyarılar
Tüm komutlar 'g' önekiyle kuruldu.
Bu komutları normal isimleriyle gerçekten kullanmanız gerekiyorsa, bashrc'nizden PATH'inize bir "gnubin" dizini ekleyebilirsiniz:
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
Ayrıca, "gnuman" dizinini bashrc'nizden MANPATH'ınıza eklerseniz, normal adlarla man sayfalarına erişebilirsiniz:
MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"
ln -s /usr/local/bin/gtimeout /usr/local/bin/timeout
yalnızca bir komutu etkinleştirmek için (diğer ad çözümü etkileşimli CLI kullanımı için çalışır, ancak bash komut dosyalarından çağrıldığında çalışmaz).
brew install coreutils
ve timeout
komut önek olmadan kullanılabilirdi.
Hemen hemen çapraz platformda çalışan başka bir basit yaklaşım (çünkü neredeyse her yerde perl kullanıyor) şudur:
function timeout() { perl -e 'alarm shift; exec @ARGV' "$@"; }
Buradan takıldı: https://gist.github.com/jaytaylor/6527607
Bir fonksiyona koymak yerine, aşağıdaki satırı bir komut dosyasına koyabilirsiniz ve o da çalışacaktır:
perl -e 'alarm shift; exec @ARGV' "$@";
veya yerleşik yardım / örnekler içeren bir sürüm:
#!/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
, zamanlayıcının süresi dolduğunda bir mesaj oluşturur ve bunu ortadan kaldırmak karmaşıklaşır .
function timeout() { perl -e 'use Time::HiRes "ualarm"; ualarm shift; exec @ARGV' "$@"; }
( Perldoc.perl.org/functions/alarm.html'ye göre Perl> = 5.8 gerektirdiğini unutmayın )
Bu komutu kullanarak herhangi bir programın çalışma süresini sınırlayabilirsiniz:
ping -t 10 google.com & sleep 5; kill $!
Ubuntu / Debian'dan gelen Zaman Aşımı Paketi, Mac'te derlenebilir ve çalışır. Paket http://packages.ubuntu.com/lucid/timeout adresinde mevcuttur.
brew install coreutils
- sonra adı gtimeout
kullanmak için PATH'inizi kullanın veya ayarlayın timeout
.
Yapabilirsin ping -t 10 google.com >nul
nul çıktıdan kurtulur. Bu nedenle, 123.45.67.8 BLAH BLAH BLAH DAN 64 BYT göstermek yerine, zaman aşımına uğrayana kadar boş bir satırsonu gösterecektir. -t bayrağı herhangi bir sayıya değiştirilebilir.