[script bash] : script redirection ecran&fichier
Résolu
A voir également:
- [script bash] : script redirection ecran&fichier
- Script vidéo youtube - Guide
- Mas script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Bingo bash - Télécharger - Divers Jeux
- Bash addition ✓ - Forum Shell
1 réponse
mamiemando
Messages postés
33758
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
1 août 2025
7 877
Modifié le 31 oct. 2020 à 01:30
Modifié le 31 oct. 2020 à 01:30
Bonjour,
Approche 1 : fonction à deux arguments
Pour moi, il faut garder ça simple : tu fais simplement une fonction avec deux arguments : le message et le fichier de log.
Comme tu peux le voir, on peut tout à fait injecter le contenu d'une variable dans la chaîne de message.
Approche 2 : fonction à nombre d'arguments variable
En bash, il existe une syntaxe pour extraire un ou plusieurs arguments passés à une fonction, comme expliqué dans ce lien.
Dans ton cas, ça donne :
(Note que l'interpréteur doit alors être
Bonne chance
Approche 1 : fonction à deux arguments
Pour moi, il faut garder ça simple : tu fais simplement une fonction avec deux arguments : le message et le fichier de log.
#!/bin/sh TMP1="$HOME/tmp1.log" TMP2="$HOME/tmp2.log" redir_screen_file(){ echo "$1" | tee -a "$2" } redir_screen_file "bonjour $TMP1 ! :)" $TMP1 redir_screen_file "hello! $TMP2 :)" $TMP2 exit 0
(mando@aldur) (~) $ chmod a+x script.sh
(mando@aldur) (~) $ ./script.sh
bonjour /home/mando/tmp1.log ! :)
hello! /home/mando/tmp2.log :)
(mando@aldur) (~) $ head tmp*log
==> tmp1.log <==
bonjour /home/mando/tmp1.log ! :)
==> tmp2.log <==
hello! /home/mando/tmp2.log :)
Comme tu peux le voir, on peut tout à fait injecter le contenu d'une variable dans la chaîne de message.
Approche 2 : fonction à nombre d'arguments variable
En bash, il existe une syntaxe pour extraire un ou plusieurs arguments passés à une fonction, comme expliqué dans ce lien.
Dans ton cas, ça donne :
#!/bin/bash TMP1="$HOME/tmp1.log" TMP2="$HOME/tmp2.log" redir_screen_file(){ last="${@:$#}" other="${*%${!#}}" echo "$other" | tee -a "$last" } redir_screen_file "bonjour" ":)" $TMP1 redir_screen_file "hello!" ":)" $TMP2 exit 0
(Note que l'interpréteur doit alors être
/bin/bash). On obtient alors :
(mando@aldur) (~) $ rm tmp*log
(mando@aldur) (~) $ ./toto.sh
bonjour :)
hello! :)
(mando@aldur) (~) $ head tmp*log
==> tmp1.log <==
bonjour :)
==> tmp2.log <==
hello! :)
Bonne chance