8
votes

Bash, stdout Redirection de commandes comme SCP

J'ai un script Bash avec des commandes SCP à l'intérieur. Cela fonctionne très bien mais si j'essaie de rediriger mon stdout avec " ./ myscript.sh> journal strong>", seuls mes échos explicites sont affichés dans le fichier "Journal". La sortie SCP est manquante.

if $C_SFTP; then
   scp -r $C_SFTP_USER@$C_SFTP_HOST:$C_SOURCE "$C_TMPDIR"
fi


0 commentaires

4 Réponses :


7
votes

SCP code> utilise un terminal interactif afin d'imprimer cette barre de progression de fantaisie. L'impression que la sortie à un fichier n'a pas de sens du tout, donc SCP code> détecte lorsque sa sortie est redirigée vers une autre autre qu'un terminal et désactive cette sortie.

Qu'est-ce qui a du sens, cependant, Rediriger sa sortie d'erreur dans le fichier au cas où il y a des erreurs. Vous voudrez peut-être désactiver la sortie standard si vous le souhaitez. P>

Il y a deux façons de faire cela. Tout d'abord, c'est d'appeler votre script avec la redirection de STDERR et de STDOUT dans le fichier journal: p>

#!/bin/bash

set -e

...


2 commentaires

si ["$ ret" -ne "0"]; Ensuite .. Il n'y a pas besoin de "environ 0, -ne / -eq testera des valeurs entières.


@Anders: juste une habitude. Changé cela.



2
votes

Malheureusement, la sortie de SCP ne peut pas simplement être redirigée vers stdout qui semble-t-elle.

Je voulais obtenir la vitesse de transfert moyenne de mon transfert SCP, et la seule façon dont je pouvais réussir à faire cela était d'envoyer STDERR et STDOUT à un fichier, puis pour echo le fichier sur stdout à nouveau. p>

par exemple: p> xxx pré>

ce qui entraînerait la sortie suivante: P >

Starting with upload test at Thu Sep 20 13:04:44 SAST 2012:
Transferred: sent 10191920, received 5016 bytes, in 15.7 seconds
Bytes per second: sent 650371.2, received 320.1
Done with upload test at Thu Sep 20 13:05:04 SAST 2012.


1 commentaires

Il n'y a pas besoin de fichier temporaire si vous redirigez starr to stdout ( 2> & 1 ) avant la tuyauterie STDOUT vers Grep, comme: SCP -V ... 2> & 1 | grep -i octets .



5
votes

Vous testez simplement votre TTY avec:

[ ~]# scp <user>@<host>:<source> /dev/tty 2>/dev/null


1 commentaires

J'essayais de filtrer "l'ajout de manière permanente à la liste des hôtes connus", mais je voulais montrer les informations de transfert. Redirection vers / Dev / TTy a fonctionné pour moi: SCP -O StricthostykeyChecking = Aucun remotes de télécommande localFile: / Dir / Télécommande 2> & 1> / dev / tty | grep -v "AVERTISSEMENT: ajouté de manière permanente" .



1
votes

J'ai trouvé une solution rugueuse pour SCP: xxx

selon la page SCP Man, -q (silencieux) désactive le compteur de progression, ainsi que la désactivation toutes les autres sorties. Ajouter -v (Verbose) également, vous obtenez des tas de sortie ... et le progresseur est toujours désactivé! La désactivation du compteur de progression vous permet de rediriger la sortie dans un fichier.

Si vous n'avez pas besoin de toute la sortie de débogage d'authentification, rediriger la sortie sur stdout et grep dehors les bits que vous ne voulez pas: < / p> xxx

sortie finale est quelque chose comme ceci: xxx

plus, ceci peut être redirigé vers un fichier: xxx


0 commentaires