Détecter si un script est exécuté en intéractif ou en batch
4 réponses
Marbolito
Bonjour
Existe t-il une commande Unix permettant de savoir si le script en
cours d'ex=E9cution est execut=E9 en batch ou en int=E9ractif ?
J'aimerais la chose suivante : d=E8s le moment o=F9 un script est
ex=E9cut=E9 manuellement il faut alors qu'il soit remplac=E9 par un batch.
Je sais qu'il existe le & pour le soumettre directement : c'est juste
une convivialit=E9 suppl=E9mentaire afin d'=E9viter que plusieurs
personnes soumettent en m=EAme temps un script=20
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Stephane Chazelas
2006-03-6, 07:36(-08), Marbolito:
Bonjour
Existe t-il une commande Unix permettant de savoir si le script en cours d'exécution est executé en batch ou en intéractif ?
Qu'est-ce que tu entends par la, et comment fais-tu toi-meme la difference?
J'aimerais la chose suivante : dès le moment où un script est exécuté manuellement il faut alors qu'il soit remplacé par un batch.
Qu'est-ce que tu entends par "par un batch" et par "manuellement"? Par opposition a quoi?
Je sais qu'il existe le & pour le soumettre directement : c'est juste une convivialité supplémentaire afin d'éviter que plusieurs personnes soumettent en même temps un script [...]
Je ne te suis pas.
Si tu veux verifier que l'entree standard est un terminal, tu peux faire [ -t 0 ], si tu veux verifier que le shell executant le script is attaché a un terminal:
(: >> /dev/tty) 2> /dev/null
Tu peux mettre tout le contenu de ton script dans:
#! /bin/sh - ( # tout le contenu de ton script ) &
si tu veux que le script s'execute en background.
Tu peux utiliser setsid or start-stop-daemon (ou nohup), si tu veux que le script s'execute en background sans etre lié a une quelconque session de login.
Si tu veux empecher l'execution concurrente de deux instances du meme script, tu peux utiliser les des mechanism de verouillage, ou start-stop-daemon.
Note que ni start-stop-daemon ni setsid ne sont des commandes standard.
-- Stéphane
2006-03-6, 07:36(-08), Marbolito:
Bonjour
Existe t-il une commande Unix permettant de savoir si le script en
cours d'exécution est executé en batch ou en intéractif ?
Qu'est-ce que tu entends par la, et comment fais-tu toi-meme la
difference?
J'aimerais la chose suivante : dès le moment où un script est
exécuté manuellement il faut alors qu'il soit remplacé par un batch.
Qu'est-ce que tu entends par "par un batch" et par
"manuellement"? Par opposition a quoi?
Je sais qu'il existe le & pour le soumettre directement : c'est juste
une convivialité supplémentaire afin d'éviter que plusieurs
personnes soumettent en même temps un script
[...]
Je ne te suis pas.
Si tu veux verifier que l'entree standard est un terminal, tu
peux faire [ -t 0 ], si tu veux verifier que le shell executant
le script is attaché a un terminal:
(: >> /dev/tty) 2> /dev/null
Tu peux mettre tout le contenu de ton script dans:
#! /bin/sh -
(
# tout le contenu de ton script
) &
si tu veux que le script s'execute en background.
Tu peux utiliser setsid or start-stop-daemon (ou nohup), si tu
veux que le script s'execute en background sans etre lié a une
quelconque session de login.
Si tu veux empecher l'execution concurrente de deux instances du
meme script, tu peux utiliser les des mechanism de verouillage,
ou start-stop-daemon.
Note que ni start-stop-daemon ni setsid ne sont des commandes
standard.
Existe t-il une commande Unix permettant de savoir si le script en cours d'exécution est executé en batch ou en intéractif ?
Qu'est-ce que tu entends par la, et comment fais-tu toi-meme la difference?
J'aimerais la chose suivante : dès le moment où un script est exécuté manuellement il faut alors qu'il soit remplacé par un batch.
Qu'est-ce que tu entends par "par un batch" et par "manuellement"? Par opposition a quoi?
Je sais qu'il existe le & pour le soumettre directement : c'est juste une convivialité supplémentaire afin d'éviter que plusieurs personnes soumettent en même temps un script [...]
Je ne te suis pas.
Si tu veux verifier que l'entree standard est un terminal, tu peux faire [ -t 0 ], si tu veux verifier que le shell executant le script is attaché a un terminal:
(: >> /dev/tty) 2> /dev/null
Tu peux mettre tout le contenu de ton script dans:
#! /bin/sh - ( # tout le contenu de ton script ) &
si tu veux que le script s'execute en background.
Tu peux utiliser setsid or start-stop-daemon (ou nohup), si tu veux que le script s'execute en background sans etre lié a une quelconque session de login.
Si tu veux empecher l'execution concurrente de deux instances du meme script, tu peux utiliser les des mechanism de verouillage, ou start-stop-daemon.
Note que ni start-stop-daemon ni setsid ne sont des commandes standard.
-- Stéphane
Chris
Bonjour
Existe t-il une commande Unix permettant de savoir si le script en cours d'exécution est executé en batch ou en intéractif ?
J'aimerais la chose suivante : dès le moment où un script est exécuté manuellement il faut alors qu'il soit remplacé par un batch. Je sais qu'il existe le & pour le soumettre directement : c'est juste une convivialité supplémentaire afin d'éviter que plusieurs personnes soumettent en même temps un script
merci
Extrait de /etc/bash.bashrc d'une Debian Sarge
# If running interactively, then: if [ "$PS1" ]; then
A+ Chris
Bonjour
Existe t-il une commande Unix permettant de savoir si le script en
cours d'exécution est executé en batch ou en intéractif ?
J'aimerais la chose suivante : dès le moment où un script est
exécuté manuellement il faut alors qu'il soit remplacé par un batch.
Je sais qu'il existe le & pour le soumettre directement : c'est juste
une convivialité supplémentaire afin d'éviter que plusieurs
personnes soumettent en même temps un script
merci
Extrait de /etc/bash.bashrc d'une Debian Sarge
# If running interactively, then:
if [ "$PS1" ]; then
Existe t-il une commande Unix permettant de savoir si le script en cours d'exécution est executé en batch ou en intéractif ?
J'aimerais la chose suivante : dès le moment où un script est exécuté manuellement il faut alors qu'il soit remplacé par un batch. Je sais qu'il existe le & pour le soumettre directement : c'est juste une convivialité supplémentaire afin d'éviter que plusieurs personnes soumettent en même temps un script
merci
Extrait de /etc/bash.bashrc d'une Debian Sarge
# If running interactively, then: if [ "$PS1" ]; then
A+ Chris
Pascal Bourguignon
Chris writes:
Bonjour Existe t-il une commande Unix permettant de savoir si le script en cours d'exécution est executé en batch ou en intéractif ? J'aimerais la chose suivante : dès le moment où un script est exécuté manuellement il faut alors qu'il soit remplacé par un batch. Je sais qu'il existe le & pour le soumettre directement : c'est juste une convivialité supplémentaire afin d'éviter que plusieurs personnes soumettent en même temps un script merci
Extrait de /etc/bash.bashrc d'une Debian Sarge
# If running interactively, then: if [ "$PS1" ]; then
As always, first: man bash
An interactive shell is one started without non-option arguments and without the -c option whose standard input and error are both connected to terminals (as determined by isatty(3)), or one started with the -i option. PS1 is set and $- includes i if bash is interactive, allowing a shell script or a startup file to test this state.
I would rather test $- for i, because any careless initialization file could set PS1 even for non-interactive shells.
case "$-" in *i*) echo "interactif" ;; *) echo "batch" ;; esac
ATTENTION: Despite any other listing of product contents found herein, the consumer is advised that, in actuality, this product consists of 99.9999999999% empty space.
Chris <chris@sra.fr> writes:
Bonjour
Existe t-il une commande Unix permettant de savoir si le script en
cours d'exécution est executé en batch ou en intéractif ?
J'aimerais la chose suivante : dès le moment où un script est
exécuté manuellement il faut alors qu'il soit remplacé par un batch.
Je sais qu'il existe le & pour le soumettre directement : c'est juste
une convivialité supplémentaire afin d'éviter que plusieurs
personnes soumettent en même temps un script merci
Extrait de /etc/bash.bashrc d'une Debian Sarge
# If running interactively, then:
if [ "$PS1" ]; then
As always, first: man bash
An interactive shell is one started without non-option arguments
and without the -c option whose standard input and error are both
connected to terminals (as determined by isatty(3)), or one
started with the -i option. PS1 is set and $- includes i if bash
is interactive, allowing a shell script or a startup file to test
this state.
I would rather test $- for i, because any careless initialization file
could set PS1 even for non-interactive shells.
case "$-" in
*i*) echo "interactif" ;;
*) echo "batch" ;;
esac
ATTENTION: Despite any other listing of product contents found
herein, the consumer is advised that, in actuality, this product
consists of 99.9999999999% empty space.
Bonjour Existe t-il une commande Unix permettant de savoir si le script en cours d'exécution est executé en batch ou en intéractif ? J'aimerais la chose suivante : dès le moment où un script est exécuté manuellement il faut alors qu'il soit remplacé par un batch. Je sais qu'il existe le & pour le soumettre directement : c'est juste une convivialité supplémentaire afin d'éviter que plusieurs personnes soumettent en même temps un script merci
Extrait de /etc/bash.bashrc d'une Debian Sarge
# If running interactively, then: if [ "$PS1" ]; then
As always, first: man bash
An interactive shell is one started without non-option arguments and without the -c option whose standard input and error are both connected to terminals (as determined by isatty(3)), or one started with the -i option. PS1 is set and $- includes i if bash is interactive, allowing a shell script or a startup file to test this state.
I would rather test $- for i, because any careless initialization file could set PS1 even for non-interactive shells.
case "$-" in *i*) echo "interactif" ;; *) echo "batch" ;; esac
ATTENTION: Despite any other listing of product contents found herein, the consumer is advised that, in actuality, this product consists of 99.9999999999% empty space.
Laurent Wacrenier
Marbolito écrit:
Existe t-il une commande Unix permettant de savoir si le script en cours d'exécution est executé en batch ou en intéractif ?
case "$-" in *i*) echo interactif ;; *) echo non interactif ;; esac
Marbolito <thierry.labille@gmail.com> écrit:
Existe t-il une commande Unix permettant de savoir si le script en
cours d'exécution est executé en batch ou en intéractif ?
case "$-" in
*i*) echo interactif ;;
*) echo non interactif ;;
esac