Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 23/08/2022, à 11:19

Bukalovski

Commande EXEC

Bonjour tout le monde, smile

Je me permets de demander de l'aide car je galère avec l'utilisation de la commande "exec" dans un script.
Mon but : lors de l'exécution d'un script, j'aimerais que ce dernier génère un fichier.log (qui ensuite écrit à la suite lors des exécutions futures de ce dit script)
Je suis parti dans cette idée :

exec 1>> /var/log/log_install.log 2>&1

Problème : J'ai quelques interractions ask/answer dans mon script qui du coup n'apparaisse pas.. hmm

Comment faire pour avoir un fichier de log "propre" tout en ayant des interactions avec le script

J'espère être clair roll

Dernière modification par Bukalovski (Le 23/08/2022, à 11:20)

Hors ligne

#2 Le 23/08/2022, à 13:16

Watael

Re : Commande EXEC

salut,

#!/bin/bash

exec &> >(tee "$ficLog")

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 23/08/2022, à 13:22

erresse

Re : Commande EXEC

Bonjour,
Oublie "exec" et contente-toi de la redirection des sorties :
avec une commande "echo", la redirection "> log" crée un fichier nommé log dans le répertoire courant, la redirection ">> log" ajoute dans ce même fichier s'il existe déjà ou le crée s'il n'existe pas encore.
Les interactions pour communiquer avec l'utilisateur via "read" par exemple, ne créent rien en sortie et n'ont donc pas de raison d'écrire dans le log...
Toute commande qui génère une sortie sur stdout et/ou stderr peut être redirigée pour écrire cette sortie dans le log.


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#4 Le 23/08/2022, à 15:42

Vobul

Re : Commande EXEC

erresse a écrit :

Oublie "exec" et contente-toi de la redirection des sorties :

C'est clair ! J'ai écrit une bonne palanquée de scripts et aucun ne contient d'exec !


Vobul
Utilisez le retour utilisable de commandes !!!
J'aime la langue française, mais je parle franglais, deal with it.
RTFM

En ligne

#5 Le 23/08/2022, à 15:52

Watael

Re : Commande EXEC

entre écrire une commande qui redirige globalement la/les sortie(s) voulue(s), et écrire une redirection derrière chaque commande... hmm
mon choix est vite fait; surtout pour du débuggage. lol

--
un exec pour les (re)diriger toutes. lol


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#6 Le 23/08/2022, à 18:06

erresse

Re : Commande EXEC

Watael a écrit :

un exec pour les (re)diriger toutes. lol

Mon dieu, mais où va-t-il chercher tout ça ?!?
Watael, y a vraiment que toi pour nous sortir des commandes pareilles !
Et oui, bien sûr que vu sous cet angle ça peut être intéressant d'utiliser un exec, encore eut-il fallut que j'en connusses l'existence... roll


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#7 Le 24/08/2022, à 11:20

Bukalovski

Re : Commande EXEC

Bonjour tout le monde,

Merci pour vos retours ! wink
Effectivement, si je peux éviter de mettre une redirection sur chaque commande, je ne suis pas contre neutral

@Watael, j'avais trouvé cette solution mais le seul problème c'est qu'à l'exécution du script c'est comme si je faisais un

bash -x script.sh

Et si possible, j'aimerais que mon script se présente normalement comme un

bash script.sh

J'espère encore une fois que je suis assez clair
Merci encore pour votre aide cool

Hors ligne

#8 Le 24/08/2022, à 11:45

Watael

Re : Commande EXEC

Bukalovski a écrit :

@Watael, j'avais trouvé cette solution mais le seul problème c'est qu'à l'exécution du script c'est comme si je faisais un

bash -x script.sh

Et si possible, j'aimerais que mon script se présente normalement comme un

bash script.sh

je ne comprends pas : la commande effectue une "simple" redirection, elle ne modifie pas le format d'affichage du script.
peux-tu nous faire un copier/coller de la sortie du script ?

il est long ton script ? on peut le voir pour le tester ?

--
NB: pour ne pas avoir à être appelé en argument d'un shell, un script doit avoir été rendu exécutable et comporter, sur la première ligne, un shebang indiquant le programme à utiliser pour l'interpréter.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#9 Le 24/08/2022, à 11:57

Bukalovski

Re : Commande EXEC

Merci pour ton retour @Watael

Je ne peux malheureusement pas partager tout le script car ce dernier possède beaucoup d'informations sensibles.

#!/bin/bash
#
set x
exec &> >(tee "$script_log")
# Nom_Serveur :
function saisieMac {
while [ "$bool" == "false" ]
do
        echo "  "
        echo "Saisir @MAC sans tirets " 
        echo -n "--> "
        read mac
        mac=$(sed -e "s/\(..\)\(..\)\(..\)\(..\)\(..\)/\1-\2-\3-\4-\5-/" <<< $mac)
        echo "@MAC OK ? y/n --> "$mac 
        echo -n "--> "
        read reponse

Ceci étant, quand je lance via

bash script.sh

Je me retrouve avec ça :

user$ bash fusion.sh 
+ exec
++ tee/log/2022-08-24-Pre-Install-Fusion.log
+ saisieMac
+ '[' false == false ']'
+ echo '  '
  
+ echo -e '\033[36mSaisir @MAC sans tirets ' '\033[0m'
Saisir @MAC sans tirets  
+ echo -n '--> '
--> + read mac
^C

Dernière modification par Bukalovski (Le 24/08/2022, à 11:58)

Hors ligne

#10 Le 24/08/2022, à 12:16

Watael

Re : Commande EXEC

commente la commande set -x

par ailleurs,
un booléen ne peut pas valoir "false". un booléen vaut VRAI ou FAUX, mais c'est la vérification d'un état, pas une valeur textuelle.

accessoirement, remplace les == par un simple =


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#11 Le 24/08/2022, à 17:20

Vobul

Re : Commande EXEC

Alors ce n'est que mon humble avis, mais pour moi dès que ça commence à se complexifier un peu, genre faire un sed sur une adresse MAC et autres joyeusetés je serai d'avis de faire ça en python.

Parce que bon bash c'est sympa pour coller 5 lignes mais on va pas se mentir, y'a trop de bashismes et de corner cases et je suis certain que même des gens aux connaissances très étendues en bash comme Watael se prennent quand même parfois les pieds dans le tapis.

Même le bash strict mode n'aide pas complètement. Ça reste toujours chelou. Au moins avec python t'as une syntax qui peut être comprise par un enfant de 5 ans et c'est bien plus maintenable, étendable.

Ça peut paraître con, mais avec python déjà tu n'aurais pas ce problème du script qui s'affiche quand tu le lances, au lieu d'être interprété. Et tu peux même facilement configurer un loggeur avec différents niveaux de log super simplement. Bref, my 2 cents.


Vobul
Utilisez le retour utilisable de commandes !!!
J'aime la langue française, mais je parle franglais, deal with it.
RTFM

En ligne