Bonjour, quelqu'un peut il me dire ce que fait la commande suivante dans un script ksh :
[ -t 1 ] && ./toto || ./toto
merci
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"
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"
"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
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
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
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
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 ?
On 25 mar, 15:31, Stephane CHAZELAS <stephane_chaze...@yahoo.fr>
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
> 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
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
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
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