Чи існує альтернатива команді таймауту на Mac OSx. Основна вимога - я можу виконувати команду протягом певного періоду часу.
наприклад:
timeout 10 ping google.com
Ця програма запускає ping протягом 10 секунд на Linux.
Чи існує альтернатива команді таймауту на Mac OSx. Основна вимога - я можу виконувати команду протягом певного періоду часу.
наприклад:
timeout 10 ping google.com
Ця програма запускає ping протягом 10 секунд на Linux.
Відповіді:
Можна використовувати
brew install coreutils
А потім, коли вам потрібен тайм-аут, використовуйте
gtimeout
..замість цього. Щоб пояснити, чому ось фрагмент із розділу Homebrew Caveats:
Застереження
Усі команди були встановлені з префіксом "g".
Якщо вам дійсно потрібно використовувати ці команди з їх звичайними іменами, ви можете додати каталог "gnubin" до вашого PATH з вашого bashrc, наприклад:
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
Крім того, ви можете отримати доступ до їхніх сторінок із звичайними іменами, якщо додати каталог "gnuman" до вашого MANPATH також із вашого bashrc:
MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"
ln -s /usr/local/bin/gtimeout /usr/local/bin/timeout
просто увімкнути одну команду (псевдонім працює для інтерактивного використання CLI, але не при виклику із скриптів bash).
brew install coreutils
, і timeout
команда була доступна без префікса.
Ще одним простим підходом, який працює майже на всіх платформах (оскільки він використовує perl, який є майже скрізь), є такий:
function timeout() { perl -e 'alarm shift; exec @ARGV' "$@"; }
Захоплено звідси: https://gist.github.com/jaytaylor/6527607
Замість того, щоб вводити його у функцію, ви можете просто помістити наступний рядок у сценарій, і він теж буде працювати:
perl -e 'alarm shift; exec @ARGV' "$@";
або версія, яка має вбудовану довідку / приклади:
#!/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
повідомлення, коли таймер закінчується, і усунення цього стає брудним .
function timeout() { perl -e 'use Time::HiRes "ualarm"; ualarm shift; exec @ARGV' "$@"; }
(Зверніть увагу, що для цього потрібен Perl> = 5,8 згідно perldoc.perl.org/functions/alarm.html )
Ви можете обмежити час виконання будь-якої програми, використовуючи цю команду:
ping -t 10 google.com & sleep 5; kill $!
Пакет часу очікування з Ubuntu / Debian можна створити для компіляції на Mac, і він працює. Пакет доступний за адресою http://packages.ubuntu.com/lucid/timeout
brew install coreutils
- тоді використовуйте gtimeout
або налаштовуйте свій PATH на використання timeout
імені.
Ви можете зробити ping -t 10 google.com >nul
>> nul позбавляється результату. Отже, замість показу 64 БАЙТІВ ВІД 123.45.67.8 BLAH BLAH BLAH, він буде просто показувати порожній новий рядок, поки не закінчиться час. -t прапор можна змінити на будь-яке число.