Есть ли альтернатива для команды тайм-аута в 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":
Предостережения
Все команды установлены с префиксом "g".
Если вам действительно нужно использовать эти команды с их обычными именами, вы может добавить каталог "gnubin" в ваш PATH из вашего bashrc, например:
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
Кроме того, вы можете получить доступ к своим справочным страницам с обычными именами, если добавить каталог "gnuman" для вашего MANPATH из вашего bashrc:
MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"
Другой простой подход, который работает в значительной степени кросс-платформенный (потому что он использует Perl, который почти везде), это:
function timeout() { perl -e 'alarm shift; exec @ARGV' "[email protected]"; }
Подцепил отсюда: https://gist.github.com/jaytaylor/6527607
Вместо того, чтобы помещать это в функцию, вы можете просто вставить следующую строку в скрипт, и это тоже будет работать:
perl -e 'alarm shift; exec @ARGV' "[email protected]";
или версия со встроенной справкой/примерами:
#!/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' "[email protected]";
Вы можете ограничить время выполнения любой программы, используя следующую команду:
ping -t 10 google.com & sleep 5; kill $!
Пакет Timeout из Ubuntu/Debian можно сделать для компиляции на Mac, и он работает. Пакет доступен в http://packages.ubuntu.com/lucid/timeout
Вы можете сделать ping -t 10 google.com >nul
> nul избавляется от вывода. Таким образом, вместо того, чтобы показывать 64 БАЙТА ИЗ 123.45.67.8 БЛА БЛА БЛА БЛА, он будет просто показывать пустой символ новой строки, пока не истечет время ожидания. Флаг -t можно изменить на любой номер.