Est-il possible dans un script de dire s'il est exécuté depuis l'écran GNU?

10

Nous avons un long processus sur un serveur distant qui est lancé manuellement de temps en temps. Malheureusement, les connexions Internet meurent, les noyaux paniquent et toute une série d'autres défis peuvent être rencontrés par la session ssh utilisée pour se connecter et démarrer le travail.

L'écran semble être un moyen idéal pour s'assurer que le processus n'est pas interrompu. Cependant, compter sur une personne pour toujours se rappeler de démarrer l'écran puis d'exécuter le script pour démarrer le processus est un problème qui attend. Existe-t-il un moyen à partir du script que je puisse vérifier pour voir si le script est appelé depuis l'écran? Si c'est le cas, le processus continuera sinon le script se terminera avec un message demandant à l'utilisateur d'exécuter l'écran en premier.

cclark
la source
Duplication possible de Comment savoir si je cours dans un "écran" Linux ou non?
Andrew Schulman

Réponses:

11

Il existe une variable d'environnement pour cela. S'il est exécuté dans l'écran, le $TERMsera screen. C'est si simple; faites juste un if dessus. Par exemple,

if [ $TERM != 'screen' ]; then echo foo; else echo bar; fi

fera écho bar quand à l'écran; foo sinon.

Falcon Momot
la source
2
Cela peut également être le screen-256colorcas si l'utilisateur a configuré la prise en charge de 256 couleurs.
mgorven du
ou screen-bce sur les systèmes avec byobu installé. echo $ TERM screen-bce
nelaaro
7

Pendant que vous travaillez avec l'écran, pourquoi ne pas exécuter le script avec 'nohup'? Cela garantira également qu'il continuera de fonctionner si vous êtes déconnecté.

Il sort dans un fichier par défaut, vous pouvez donc utiliser d'autres outils pour surveiller la sortie du script si vous le souhaitez.

Magellan
la source
1
Bien que l'exécution avec nohup atteigne le même résultat en garantissant que le processus continue de s'exécuter, n'aurais-je toujours pas le même problème de quelqu'un qui pourrait oublier d'exécuter le script avec nohup? Ou existe-t-il un moyen dans un script de s'assurer que «nohup» a été utilisé ou dois-je créer un script wrapper qui appelle mon script d'origine avec nohup?
cclark
Ouais. Bien que j'aime mes padawans (administrateurs système juniors) comme j'aime mes enfants, ils oublient souvent ce genre de choses. Donc, tout est emballé pour qu'ils n'aient pas à se rappeler quelles choses taper pour préfixer les commandes importantes.
Magellan