Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

question commande "test"

5 réponses
Avatar
le pierre
Bonjour, quelqu'un peut il me dire ce que fait la commande suivante
dans un script ksh :

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

merci

5 réponses

Avatar
sural75
On 25 mar, 11:28, le pierre wrote:
Bonjour, quelqu'un peut il me dire ce que fait la commande suivante
dans un script ksh :

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

merci


Avatar
sural75
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"
Avatar
Stephane CHAZELAS
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
Avatar
lepierot
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 ?
Avatar
Stephane CHAZELAS
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