104 votes

Commande Timeout sur Mac OS X ?

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.

0 votes

189voto

kvz Points 745

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"

34voto

Brad Parks Points 5513

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 :

timeout.sh

perl -e 'alarm shift; exec @ARGV' "$@";

ou une version avec aide/exemples intégrés :

timeout.sh

#!/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' "$@";

20voto

jonashackt Points 1482

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).

8voto

deadmoto Points 256

Cette commande permet de limiter le temps d'exécution de n'importe quel programme :

ping -t 10 google.com & sleep 5; kill $!

9 votes

Ce n'est probablement pas ce que vous souhaitez. Le résultat est que la commande s'exécutera exactement en 5 secondes. En d'autres termes, si vous voulez que la durée soit maximale mais pas minimale, ce n'est pas ce que vous recherchez.

3voto

sheki Points 2247

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

2 votes

Un moyen plus simple est d'utiliser Homebrew : brew install coreutils - puis utiliser gtimeout ou configurer votre PATH pour utiliser le fichier timeout nom.

0 votes

Depuis Ubuntu 20.04, il ne semble pas y avoir d'interface séparée entre le système d'exploitation et le système de gestion de l'information. timeout paquet. Les timeout La commande est fournie par coreutils .

Prograide.com

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.

Powered by:

X