Commandes et Sortie d'erreurs
Résolu
Bonjour,
J'aimerais stocker le résultat d'une commande dans un fichier texte mais je n'y arrive pas, lorsque je fait ceci:
Comment resoudre ce problème ?
Merci d'avance,
J'aimerais stocker le résultat d'une commande dans un fichier texte mais je n'y arrive pas, lorsque je fait ceci:
net rpc shutdown -f -t 60 -I 0.0.0.0 -U identifiant%password > test.logou cela :
net rpc shutdown -f -t 60 -I 0.0.0.0 -U identifiant%password 2>&1 > test.logle fichier est bien crée mais il est vide.
Comment resoudre ce problème ?
Merci d'avance,
2 réponses
-
Pré-requis
Avant de commencer il faut comprendre qu'un processus écrit sur deux flux :
- le premier (le flux de sortie), qui correspond aux opérateurs1>
(aussi noté>
) et1>>
(aussi noté>>
)
- le second (le flux d'erreur), qui correspond aux opérateurs2>
et2>>
.
Ces flux peuvent être rattrapés par une redirection (l'un des opérateurs mentionnés si dessous ou par un pipe|
) pour être redirigé vers un fichier de données (tous les opérateurs mentionnés ci dessous excepté|
) ou vers le flux d'entrée d'un nouveau processus (dans le cas de|
).
Syntaxe
L'ordre dans lequel tu écris tes redirections est important. Prenons l'exemple de la commandefind
. Celle-ci écrit naturellement les résultats (les répertoires trouvés) dans le flux de sortie, et les erreurs (dues aux permissions par exemple) dans le flux d'erreur.
find /etc/
1) Si tu regardes ci-dessous, le flux de sortie est redirigé vers toto.txt ...
(mando@silk) (~) $ find /etc/ 2>&1 > toto.txt
find: "/etc/vpnc": Permission non accordée
find: "/etc/polkit-1/localauthority": Permission non accordée
find: "/etc/ssl/private": Permission non accordée
... et le flux d'erreur est redirigé vers le flux de sortie comme le prouve :
(mando@silk) (~) $ find /etc/ 2>&1 > toto | grep -v find
(mando@silk) (~) $
2) Si au contraire tu écris ceci, tout se passe "bien" :
(mando@silk) (~) $ find /etc/ 1> toto.txt 2>&1
(mando@silk) (~) $
Dans ton cas
Ainsi dans ton cas tu as probablement simplement écrit tes redirections dans le mauvais ordre, ce qui donnerait :
net rpc shutdown -f -t 60 -I 0.0.0.0 -U identifiant%password 1> test.log 2>&1
Peut-être même que dans ton cas, il suffit d'écrire directement le flux d'erreur dans le fichier et ne pas rediriger le flux de sortie comme ceci :
net rpc shutdown -f -t 60 -I 0.0.0.0 -U identifiant%password 2> test.log
Bonne chance -
Merci, ça fonctionne.
J'ai rarement vu un post aussi clair.