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

Détecter si un script est exécuté en intéractif ou en batch

4 réponses
Avatar
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

merci

4 réponses

Avatar
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

Avatar
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

Avatar
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

--
__Pascal Bourguignon__ http://www.informatimago.com/

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.


Avatar
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