question commande "test"

Le
le pierre
Bonjour, quelqu'un peut il me dire ce que fait la commande suivante
dans un script ksh :

[ -t 1 ] && ./toto || ./toto

merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
sural75
Le #18977741
On 25 mar, 11:28, le pierre
Bonjour, quelqu'un peut il me dire ce que fait la commande suivante
dans un script ksh :

[ -t 1 ] && ./toto || ./toto

merci


sural75
Le #18977731
littéralement, mais sans comprendre :

"si le numéro du descripteur de fichier fourni est ouvert et associé à
un périphérique de terminal, alors exécuter le script toto, sinon
exécuter le script toto"
Stephane CHAZELAS
Le #18977911
2009-03-25, 03:28(-07), le pierre:
Bonjour, quelqu'un peut il me dire ce que fait la commande suivante
dans un script ksh :

[ -t 1 ] && ./toto || ./toto



si stdout est un terminal, alors executer toto et si toto
echoue, reessayer une fois. Si stdout n'est pas un terminal,
alors execute toto mais sans reessayer si ca echoue.

Une maniere plus verbeuse de l'ecrire:

if [ -t 1 ]; then
if ! ./toto; then
./toto
fi
else
./toto
fi

--
Stéphane
lepierot
Le #18979061
On 25 mar, 15:31, Stephane CHAZELAS wrote:
2009-03-25, 03:28(-07), le pierre:

> Bonjour, quelqu'un peut il me dire ce que fait la commande suivante
> dans un script ksh :

> [ -t 1 ] && ./toto || ./toto

si stdout est un terminal, alors executer toto et si toto
echoue, reessayer une fois. Si stdout n'est pas un terminal,
alors execute toto mais sans reessayer si ca echoue.

Une maniere plus verbeuse de l'ecrire:

if [ -t 1 ]; then
  if ! ./toto; then
    ./toto
  fi
else
  ./toto
fi

--
Stéphane



En fait j'en ai oublié une partie :

La vrai commande est :

[ -t 1 ] && ./toto || ./toto >> $LOG 2>&1

ca change tout non ?
Stephane CHAZELAS
Le #18981291
2009-03-25, 09:42(-07), lepierot:
[...]
if [ -t 1 ]; then
  if ! ./toto; then
    ./toto
  fi
else
  ./toto
fi

--
Stéphane



En fait j'en ai oublié une partie :

La vrai commande est :

[ -t 1 ] && ./toto || ./toto >> $LOG 2>&1

ca change tout non ?



if [ -t 1 ]; then
if ! ./toto; then
./toto >> $LOG 2>&1
fi
else
./toto >> $LOG 2>&1
fi

Mais m'est avis que l'idee etait

if [ -t 1 ]; then
./todo
else
./toto >> $LOG 2>&1
fi

C'est a dire envoyer l'output de toto vers stdout si c'est
un terminal ou vers un fichier de log sinon. Mais l'auteur a
oublié de considerer ce qui se passe si ./toto echoue.

cmd1 && cmd2

est

cmd1 ET cmd2

c'est a dire ca renvoie true que si a la fois cmd1 et cmd2
renvoie true (et cmd2 n'est pas executee si cmd1 renvoie false).

cmd1 || cmd2

cmd1 OU cmd2

renvoie true si cmd1 ou cmd2 renvoie true. cmd2 n'est pas
executee si cmd1 renvoie true. C'est comme en C. En shell, || et
&& ont la meme precedence et c'est associatif par la gauche.

cmd1 && cmd2 || cmd3

est

(cmd1 && cmd2) || cmd3

cmd1 && cmd2 || cmd3

est la meme chose que

if cmd1
then cmd2
else cmd3
fi

que si cmd2 renvoie toujours true.

if [ -t 1 ]; then
if ! ./toto; then
./toto >> $LOG 2>&1
fi
else
./toto >> $LOG 2>&1
fi

peut aussi s'ecrire:

([ -t 1 ] || exec >> "$LOG" 2>&1
exec ./toto)

D'ailleurs, le fait qu'il utilise >> suggere que

[ -t 1 ] || exec > "$LOG" 2>&1

pourrait etre ajouté au debut du script.

--
Stéphane
Publicité
Poster une réponse
Anonyme