IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Problème de redirection et sortie standard.


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 43
    Par défaut Problème de redirection et sortie standard.
    Bonjour,

    Je fais un petit script qui regroupe l’exécution de plusieurs commandes hdparm, parted et blockdev.

    Vu les commandes, j'utilise un check des droits de l'utilisateur "$EUID -ne 0".
    Le script fait déjà ce que je veux, je suis aller vers la simplicité d'écriture et je réduirai le code si possible par la suite (ex: boucle while pour répétition d'echo, etc...).

    Mais j'aimerais y ajouter un log d’exécution qui ressortirait l'intégralité de l’exécution du script.

    Afin de ne pas surcharger le script et de le ralentir lors de son exécution et pour la propreté du code, j'ai trouvé en cherchant sur le net la possibilité de ressortir l'intégralité de l’exécution d'un script, y insérant la commande
    "exec > >(tee /var/log/last_exec_monscript.log)"

    Tout se passe très bien en utilisateur root, mais en utilisateur "sudo", j'ai une erreur:
    "Syntax error: redirection unexpected" et ce pour la ligne de ma redirection.

    Script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    #
    #!/bin/bash
    #
     
    Crouge="\\033[1;31m"
    Cbleu="\\033[1;34m"
    Cvert="\\033[1;32m"
    Cnormal="\\033[0;39m"
     
    if [[ $EUID -ne 0 ]]; then
    	echo
    	echo -e "This script must be run as$Crouge ROOT$Cnormal user"
    	echo
    	exit 42
    else
    	#Enregistrement du log
    	exec > >(tee /var/log/last_exec_monscript.log)
     
    	echo
    	echo " --------------------------------------------------------------"
    	echo "| Listing des disques présents : parted -l / blockdev --report |"
    	echo " --------------------------------------------------------------"
     
    	#Parsing du dossier /dev/ à la recherche d'un type block par défaut sd? (a,b,c,etc.)
    	for file in `ls /dev/sd?`; do
    		echo
    		echo -e "---------------$Crouge Information du disque $file $Cnormal-----------------"
    		echo
     
    		#Recuperation du numéro de série , redirection d'erreur dans /dev/null -> vide si inexistant (choix perso de voir le champs vide qu'inexistant)
    		vserial=$(hdparm -i $file 2> /dev/null | egrep -ioe "serialno=.*" | awk -F"=" '{print $2}')
    		echo -e "Serial Number: $vserial"
     
    		#Récuperation des infos du disque et partitions.
    		parted $file print
    		echo -e "----------------------$Cbleu Listing des accès $Cnormal-----------------------"
    		echo
     
    		#Récupération des accès partition comprise --> *
    		blockdev --report $file*
    		echo
    		echo
    	done
     
     
    	echo "----------------------------------------------------------------" 
    	echo "Log: /var/log/last_exec_monscript.log -- Last use: "$(date +%d/%m/%Y--%H:%M)			
    	echo "----------------------------------------------------------------" 					
    	echo  																							
     
    fi
     
    exit 0
    Le script est placé dans /usr/bin .

    J'ai essayé de faire le log dans vers "$HOME/last_exec_monscript.log" , toujours la même erreur, donc ce n'est pas un problème de droit visiblement...

    J'ai essayé en rajoutant un sudo à la commande tee et exec (normalement inutile mais bon...) mais rien y fait.

    Je suis ouvert à toutes modifications quant au fond et à la forme du script.
    Existe-t-il un moyen plus propre que celui la pour faire un affichage console et une redirection ?

    D'avance merci, bonne journée.

    Draleg

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    Bonjour,

    le shebang doit être sur la première ligne du script, autrement il est considéré comme un simple commentaire :
    Code ./testShebang : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #
    #!/bin/bash
     
    whoami
    echo "SHELL = $SHELL"
    ps -o cmd= -p $$
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ sudo ./testShebang
    root
    SHELL = /bin/bash
    sh ./testShebang
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 43
    Par défaut
    Hooo bon sang !!

    Il n'y a pas a dire quand on a le nez dedans, je me suis focalisé sur le code en lui même et je n'ai pas vu ça .

    Cela corrige effectivement le problème, je me pose quand même une question.
    Le shebang stipule quel shell utiliser, sinon c'est bien celui attribué par l'utilisateur qui prend le dessus, hors pour mon utilisateur dans passwd c'est bien /bin/bash, je ne vois pas pourquoi du coup cela corrige l'erreur. Je fais fausse route ?

    Merci beaucoup , bonne journée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Redirection des sorties standards dans JTextArea
    Par somnix dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 03/12/2012, 10h26
  2. Bash - Redirection silencieuse sortie standard
    Par ned57 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 05/11/2012, 14h46
  3. [tcsh] Redirection entrée/sortie standards
    Par arkham55 dans le forum Shell et commandes POSIX
    Réponses: 5
    Dernier message: 27/04/2012, 09h21
  4. demon et redirection de sortie standard
    Par Ganondorf dans le forum Réseau
    Réponses: 2
    Dernier message: 23/09/2010, 22h42
  5. Redirection de sortie standard dans un script bash
    Par redvivi dans le forum Linux
    Réponses: 4
    Dernier message: 07/09/2008, 21h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo