Existe-t-il une alternative à la commande timeout sur Mac OSx. L'exigence de base est de pouvoir exécuter une commande pendant une durée déterminée.
par exemple
timeout 10 ping google.com
Ce programme exécute ping pendant 10s sur Linux.
Existe-t-il une alternative à la commande timeout sur Mac OSx. L'exigence de base est de pouvoir exécuter une commande pendant une durée déterminée.
par exemple
timeout 10 ping google.com
Ce programme exécute ping pendant 10s sur Linux.
Vous pouvez utiliser
brew install coreutils
Ensuite, lorsque vous avez besoin d'un délai d'attente, utilisez
gtimeout
au lieu de cela. Pour expliquer pourquoi, voici un extrait de la section Homebrew Caveats :
Mises en garde
Toutes les commandes ont été installées avec le préfixe "g".
Si vous avez vraiment besoin d'utiliser ces commandes avec leur nom normal, vous pouvez utiliser la commande pouvez ajouter un répertoire "gnubin" à votre PATH depuis votre bashrc comme :
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
En outre, vous pouvez accéder à leurs pages de manuel avec norma le répertoire "gnuman" à votre MANPATH depuis votre bashrc :
MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"
Une autre approche simple qui fonctionne à peu près sur toutes les plates-formes (parce qu'elle utilise perl qui est presque partout) est la suivante :
function timeout() { perl -e 'alarm shift; exec @ARGV' "$@"; }
Tiré 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 avec aide/exemples intégrés :
#!/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' "$@";
En tant que kvz a déclaré il suffit d'utiliser un logiciel maison :
brew install coreutils
Aujourd'hui, le timeout
est déjà prête à l'emploi - aucun alias n'est nécessaire (et aucun gtimeout
nécessaire, mais également disponible).
Le paquet Timeout d'Ubuntu / Debian peut être compilé sur Mac et fonctionne. Le paquet est disponible à l'adresse http://packages.ubuntu.com/lucid/timeout
Un moyen plus simple est d'utiliser Homebrew : brew install coreutils
- puis utiliser gtimeout
ou configurer votre PATH pour utiliser le fichier timeout
nom.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Voir aussi unix.stackexchange.com/questions/43340/