Question

J'essaie de capturer la sortie d'un script d'installation (qui utilise scp) et de la consigner. Cependant, je ne reçois pas tout ce que scp imprime, à savoir la barre de progression.

sortie d'écran:

  

Copie   / user2 / cdb / builds / tmp / uat / myfiles / * à   serveur / utilisateurs / mes fichiers comme cdb

     

mot de passe cdb @ server:   mon fichier 100% | ****************************** | 2503 00:00

journal de sortie:

  

Copie   / user2 / cdb / builds / tmp / uat / myfiles / * à   serveur / utilisateurs / mes fichiers comme cdb

J'aimerais vraiment savoir que mon dossier est arrivé là. Voici ce que j'essaie maintenant en vain:

  

myscript.sh 2 > & amp; 1 | tee mylogfile.log

Quelqu'un at-il un bon moyen de capturer la sortie scp et de la consigner?

Merci.

Était-ce utile?

La solution

Il semble que votre manque de savoir si le scp a réussi ou non dans le journal.

J'imagine que la barre de défilement n'imprime pas sur la sortie standard et utilise ncurses ou un autre type de TUI?

Vous pouvez simplement regarder la valeur de retour de scp pour voir si elle a réussi. Comme

scp myfile user@host.com:. && echo success!

man scp dit

scp exits with 0 on success or >0 if an error occurred.

Autres conseils

scp imprime sa barre de progression au terminal à l’aide de codes de contrôle. Il détectera si vous redirigez la sortie et omettra donc la barre de progression.

Vous pouvez contourner ce problème en incitant scp à penser qu'il s'exécute dans un terminal en utilisant le "script". commande installée par défaut sur la plupart des distributions:

script -q -c "scp server:/file /tmp/" > /tmp/test.txt

Le contenu de test.txt sera:

file    0%    0     0.0KB/s   --:-- ETA
file   18%   11MB  11.2MB/s   00:04 ETA
file   36%   22MB  11.2MB/s   00:03 ETA
file   54%   34MB  11.2MB/s   00:02 ETA
file   73%   45MB  11.2MB/s   00:01 ETA
file   91%   56MB  11.2MB/s   00:00 ETA
file  100%   61MB  10.2MB/s   00:06

... ce qui est probablement ce que vous voulez.

Je suis tombé sur ce problème en redirigeant la sortie d’un script interactif dans un fichier journal. Ne pas avoir les résultats dans le journal n'était pas un problème car vous pouvez toujours évaluer les codes de sortie. Mais je voulais vraiment que l'utilisateur interactif voie la barre de progression. Cette réponse résout les deux problèmes.

Peut-être pouvez-vous utiliser le script 'pour enregistrer la session de terminal.

scp myfile user@host.com:. && echo success! 

est très utile, mais pour écrire le message dans un fichier journal, je l’ai modifié comme suit

scp myfile user@host.com:. && echo myfile successfully copied! >> logfile 2>&1

et ceci écrira "mon fichier copié avec succès!" message au fichier journal.

Essayez:

scp server:/file /tmp/ > /dev/tty

Je ne peux pas commenter pour le moment :( je vais donc ajouter une mise à jour ici ...

@Martin avait la meilleure solution pour moi, même si votre commande scp est à mi-parcours de votre script, elle sera affichée peut-être après les commandes qui ont été exécutées ultérieurement.

Je pense que c'est parce que le script doit exécuter la commande dans un sous-shell, mais je n'ai pas encore testé.

EDIT: cela crée effectivement un shell, donc si vous avez besoin que certaines choses s'exécutent (et échouez) de manière séquentielle (comme dans un script de construction), vous devrez alors ajouter une certaine logique autour de l'utilisation de la commande de script.

c'est-à-dire

script -q -c " votre commande " & amp; & amp; dormir 1

ou quelque chose de similaire, de sorte que votre shell parent attende que le shell enfant se termine avant de poursuivre.

oui j’essayais récemment d’obtenir une sortie dans un script php de proc_open () j'ai perdu un peu de temps en essayant d'obtenir une sortie :-) mais c'est un peu tard ici et j'ai alors lu ce post m'a fait comprendre que je n'ai pas vraiment besoin de cette sortie compliquée de mon script

seul le code de sortie fera l'affaire: -)

$ code_sortie = proc_close ($ process);

$ grep -r "Error" xyz.out > abc.txt

Ici, dans la commande ci-dessus, je stocke la sortie dans le fichier abc.txt.

Cette commande grep permet de rechercher du texte contenant Erreur dans le fichier xyz.out et de stocker le résultat dans abc.txt sans afficher sur la console.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top