2017-10-16 4 views
0

Salut, j'ai une fonction bash:fonction Bash donner en tant que paramètre -> archives ssh dossier distant dans archive.tar.gz local -> echo "test" emballé également dans le fichier tar

function echoAndExecArgs 
{ 

echo -e "\n\n======== command: [email protected] ========" 
[email protected] 

} 

Il fait écho à la commande et tous ses paramètres à stdout et l'exécute.

Je donne maintenant la commande suivante:

ssh [email protected] tar -czvf- /someFolder 2>> sterr.log | dd of=archive.tar.gz 

Le problème vient du fait obtient également écrit la chaîne "\n\n======== command: [email protected] ========" dans le début de mon dossier archive.tar.gz.

Si je fais xxd -l 100 archive.tar.gz, je vois que la chaîne "\n\n======== command: [email protected] ========" est écrite au début du fichier. Cela conduit bien sûr au problème que le fichier est corrompu et ne peut pas être extrait comme d'habitude.

Ma question est: Comment est-il possible de donner ma commande ssh en tant que paramètre à la fonction echoAndExecArgs qu'il redirige uniquement la sortie réelle du fichier de la commande tar dans le fichier archive.tar.gz et non toutes les sorties std de l'ensemble de la fonction?

Cette approche donne le même résultat erroné:

ssh [email protected] "tar -zcf - /someFolder" > archive.gz 
+0

'stout' probablement juste une faute de frappe, mais juste au cas où il devrait être « stdout », ce qui signifie « sortie standard ». même chose pour 'sterr' qui devrait être" stderr ". – Aaron

+0

Notez que vous voulez rarement '$ @' dans une chaîne entre guillemets plus grande. Non cité sur la ligne suivante, il n'est pas différent de "$ *" non cité et certainement pas * ce que vous voulez. – chepner

Répondre

0

le problème semble être sortie redirigé vers tuyau, peut-être essayer

echo -e "..." > /dev/tty 
0

Vous pouvez écrire à stderr dans votre fonction:

echoAndExecArgs() { 
    printf "\n\n======== command: %s ========\n" "$*" >&2 
    "[email protected]" 
} 
  • Mieux vaut utiliser plus portable printf au lieu de echo -e
  • Citation "[email protected]" lors de l'exécution dans la coquille