afficher automatiquement le résultat d'un script sur l'écran du terminal Le sujet est résolu

Demande d'aide : c'est ici.
Répondre
tony
Membre
Membre
Messages : 401
Inscription : 10 juil. 2023, 00:54
Status : Hors-ligne

c'est la dernière étape de mon script qui ne fonctionne que si c'est moi qui démarre le script. Donc voilà le script en question où "inode1" est un fichier intermédiaire et "inode2" le fichier d'enregistrement:

Code : Tout sélectionner

#/!bin/bash
# inode_check

xdg-mime query default inode/directory >> /home/<user>/inode1 2>&1;
echo $(date +%a%d\ %X)  >> /home/<user>/inode1 2>&1;
sed -i  1,3d /home/<user>/inode1;
echo "" >> /home/<user>/inode1;
tac /home/<user>/inode1 > /home/<user>/inode2; 
cat /home/<user>/inode2
Pas de problème avec l'enregistrement dans "inode1/2", mais la dernière instruction n'est pas prise en compte ni par cron, ni par anacron. Sinon tout le reste est OK. Conclusion: si je veux voir les résultats de l'exécution de ce script je dois moi-même afficher le fichier inode2. J'aurais bien aimé avoir une exécution 100% automatique:
  • je laisse un écran de terminal ouvert en permanance, pour avoir un affichage disponible lorsque cron ou anacron lanceront l'exécution
  • à la sortie de veille de mon portable je n'ai qu'à lire le résultat
Pressentant un problème de variable d'environnement, j'ai ajouté une ligne dans /root/.bashrc = export DISPLAY=:0.0. Pas d'effet. Un affichage automatique est-il possible, si oui comment faire?
Debian 12/ Xfce
Avatar de l’utilisateur
piratebab
Site Admin
Site Admin
Messages : 5852
Inscription : 24 avr. 2016, 18:41
Localisation : sud ouest
Status : En ligne

Bonjour, il faudrait que tu précises dans quel terminal tu veux l'afficher
La commande te donneras le nom du terminal. Tu redirige sla sortie de ton script dans ce terminal avec >>
Ce n'est pas très pratique si ton terminal change de nom.
Tu peux demander à ton script d'ouvrir un terminal avec la commande xterm
Tu peux aussi passer par la messagerie entre utilisateurs avec la commande wall (write all)

Code : Tout sélectionner

echo "blabla" | wall
tony
Membre
Membre
Messages : 401
Inscription : 10 juil. 2023, 00:54
Status : Hors-ligne

piratebab a écrit : 02 mars 2025, 19:18 Bonjour, il faudrait que tu précises dans quel terminal tu veux l'afficher
La commande te donneras le nom du terminal. Tu redirige sla sortie de ton script dans ce terminal avec >>
.........
salut,

impec! maintenant que je peux faire l'affichage sur un terminal pré-ouvert je vais voir ce que je peux faire avec "xterm" et aussi avec "wall".

Merci pour l'info.

PS1: la commande

Code : Tout sélectionner

xterm -e "cat /home/mmas/inode2; bash"
fonctionne bien si j'exécute le script manuellement mais pas en automatique: testé avec cron.

PS2: cron et anacron exécutent-elles le script dans le même environnement que le mien lorsque j'exécute le script?
Réponse: a priori non, le terminal est "interactif" , cron ne me demande rien lors de son exécution, il doit donc s'exécuter dans un shell non interactif. Peut-être que cette différence de nature pourrait expliquer la différence de comportement? À voir.

PS3: interactif ou pas ça marche avec cette commande:

Code : Tout sélectionner

DISPLAY=:0 xterm -e "cat /home/mmas/inode2; bash"
un mini-écran s'affiche dans la fenêtre active. Reste à voir ce qu'il va se passer lorsque je mets mon portable en veille, mais la solution n'a jamais été aussi proche.

PS4: voilà le pourquoi j'ai besoin de spécifier Quel DISPLAY utiliser: "But cron jobs, like system services in general, exist "outside" of any user session, so they have nowhere to inherit DISPLAY from. (Indeed they might even start when the user has no display – e.g. at the login screen, the display belongs to a system account – or when there are no displays running at all.)"
Debian 12/ Xfce
Répondre