Pages : 1
#1 Le 23/08/2022, à 10:19
- Bukalovski
Commande EXEC
Bonjour tout le monde,
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..
Comment faire pour avoir un fichier de log "propre" tout en ayant des interactions avec le script
J'espère être clair
Dernière modification par Bukalovski (Le 23/08/2022, à 10:20)
Hors ligne
#2 Le 23/08/2022, à 12:16
- Watael
Re : Commande EXEC
salut,
#!/bin/bash
exec &> >(tee "$ficLog")
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#3 Le 23/08/2022, à 12: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 le problème solutionné, 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, à 14:42
- Vobul
Re : Commande EXEC
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
Hors ligne
#5 Le 23/08/2022, à 14: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...
mon choix est vite fait; surtout pour du débuggage.
--
un exec pour les (re)diriger toutes.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#6 Le 23/08/2022, à 17:06
- erresse
Re : Commande EXEC
un exec pour les (re)diriger toutes.
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...
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 le problème solutionné, 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, à 10:20
- Bukalovski
Re : Commande EXEC
Bonjour tout le monde,
Merci pour vos retours !
Effectivement, si je peux éviter de mettre une redirection sur chaque commande, je ne suis pas contre
@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
Hors ligne
#8 Le 24/08/2022, à 10:45
- Watael
Re : Commande EXEC
@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.
En ligne
#9 Le 24/08/2022, à 10: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, à 10:58)
Hors ligne
#10 Le 24/08/2022, à 11: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.
En ligne
#11 Le 24/08/2022, à 16: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
Hors ligne
Pages : 1