Mac OSx에서 시간 초과 명령에 대한 대안이 있습니까? 기본 요구 사항은 지정된 시간 동안 명령을 실행할 수 있다는 것입니다.
예 :
timeout 10 ping google.com
이 프로그램은 Linux에서 10 초 동안 ping을 실행합니다.
답변:
당신이 사용할 수있는
brew install coreutils
그런 다음 시간 초과가 필요할 때마다
gtimeout
.. 대신. Homebrew주의 사항 섹션에서 발췌 한 이유를 설명하려면 :
주의 사항
모든 명령은 접두사 'g'로 설치되었습니다.
이러한 명령을 정상적인 이름으로 사용해야하는 경우 다음과 같이 bashrc에서 PATH에 "gnubin"디렉토리를 추가 할 수 있습니다.
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
또한 bashrc에서 "gnuman"디렉토리를 MANPATH에 추가하면 일반 이름으로 해당 매뉴얼 페이지에 액세스 할 수 있습니다.
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' "$@"; }
( perldoc.perl.org/functions/alarm.html 에 따라 Perl> = 5.8이 필요합니다. )
Ubuntu / Debian의 Timeout Package는 Mac에서 컴파일하도록 만들 수 있으며 작동합니다. 패키지는 http://packages.ubuntu.com/lucid/timeout 에서 사용할 수 있습니다 .
brew install coreutils
.-그런 다음 이름 gtimeout
을 사용하도록 PATH를 사용하거나 설정합니다 timeout
.