[script bash] : script redirection ecran&fichier [Résolu]

Signaler
-
Messages postés
29413
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
11 novembre 2020
-
Bonjour,

au depart, j'ai ceci dans le code
echo "test de l'avion" "pas possible" "oui" >>tmp1
echo "marchande de tapis" "degel" >>tmp2
echo -e "033[01mtest"

ça marche, mais ça ne me convient pas tout à fait

après, j'ai modifié pour ceci, (affichage et redirection dans un fichier en meme temps)

echo "test de l'avion" "pas possible" "oui" | tee -a tmp1
echo "marchande de tapis" "degel" | tee -a tmp2
echo -e "033[01mtest"


c'est mieux, mais je me demande s'il est possible d'obtenir quelque chose qui me convient plus

Je me demande s'il est possible de faire quelque chose comme ceci.
mais je ne connais ^pas le code qu'il me faudrait
redir_screen_file(){
???????
}

redir_screen_file "test de l'avion" "pas possible" "oui" ">>tmp1"
redir_screen_file "marchande de tapis" "degel" ">>tmp2"
redir_screen_file "033[01mtest"


si vous avez une idée

Merci
PS : j'ai fait exprès de mettre beaucoup d'espace dans l'argument de 'echo', car je voulais que le resultat dans le fichier/ecran ne soit pas déformé

Configuration: Windows / Firefox 78.0

1 réponse

Messages postés
29413
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
11 novembre 2020
6 969
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.

#!/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