Existe-t-il une alternative pour la commande timeout sur Mac OSx. L'exigence de base est que je suis capable d'exécuter une commande pendant une durée spécifiée.
par exemple:
timeout 10 ping google.com
Ce programme exécute le ping pendant 10 secondes sous Linux.
Vous pouvez utiliser
brew install coreutils
Et puis chaque fois que vous avez besoin d'un délai, utilisez
gtimeout
..au lieu. Pour expliquer pourquoi voici un extrait de la section Homebrew Caveats:
Avertissements
Toutes les commandes ont été installées avec le préfixe "g".
Si vous avez vraiment besoin d'utiliser ces commandes avec leurs noms normaux, vous pouvez ajouter un répertoire "gnubin" à votre PATH depuis votre bashrc comme:
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
De plus, vous pouvez accéder à leurs pages de manuel avec des noms normaux si vous ajoutez également le répertoire "gnuman" à votre MANPATH à partir de votre bashrc:
MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"
Une autre approche simple qui fonctionne à peu près sur plusieurs plates-formes (car elle utilise Perl qui est presque partout) est la suivante:
function timeout() { Perl -e 'alarm shift; exec @ARGV' "$@"; }
Accroché d'ici: https://Gist.github.com/jaytaylor/6527607
Au lieu de le mettre dans une fonction, vous pouvez simplement mettre la ligne suivante dans un script, et cela fonctionnera aussi:
Perl -e 'alarm shift; exec @ARGV' "$@";
ou une version qui a intégré l'aide/exemples:
#!/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' "$@";
Vous pouvez limiter le temps d'exécution de n'importe quel programme en utilisant cette commande:
ping -t 10 google.com & sleep 5; kill $!
Le paquet Timeout d'Ubuntu/Debian peut être compilé sur Mac et cela fonctionne. Le package est disponible sur http://packages.ubuntu.com/lucid/timeout
Tu peux faire ping -t 10 google.com >nul
le> nul se débarrasse de la sortie. Ainsi, au lieu d'afficher 64 octets à partir de 123.45.67.8 BLAH BLAH BLAH, il affichera simplement une nouvelle ligne vierge jusqu'à ce qu'elle expire. Le drapeau -t peut être changé en n'importe quel nombre.