0
votes

Stocker la sortie de la commande dans SFTP à la variable et la liste

Mon objectif est de créer un script shell de telle sorte qu'il connecte et filtre la liste des fichiers disponibles et sélectionnez un fichier à obtenir. Ici, je dois exécuter des commandes comme à Bash. Mon code d'exemple est: xxx


2 commentaires

Vous souhaitez contrôler de votre programme une session FTP, et à la même temps, gardez un dialogue à l'utilisateur. Je ne ferais pas cela à Bash. Jetez un coup d'œil à, par exemple, Perl avec ici , ou RUBY .


ici sont plus exemples SFTP pour Perl.


3 Réponses :


2
votes

L'approche ci-dessus ne fonctionnera pas. N'oubliez pas que le "Ici Document" ( << eof ... EOF ) est évalué comme entrée dans la session SFTP . Les invites seront affichées et une entrée de l'utilisateur sera demandée avant toute sortie ( ls dans ce cas) sera disponible auprès de SFTP.

envisager d'utiliser lftp , qui a plus construction flexible. En particulier, il vous permettra d'utiliser des variables, de créer une commande de manière dynamique, etc. xxx

en théorie, vous pouvez créer des constructions similaires avec des tuyaux et SFTP (Peut être un co-processus?), mais c'est beaucoup plus difficile.

Bien sûr, l'autre alternative consiste à créer des sessions différentes SFTP pour la liste, mais cela coûtera cher / inefficace.


1 commentaires

LFTP n'est pas installé, mais la réponse ci-dessous a bien fonctionné



1
votes

Après quelques recherches et expérimentations, a trouvé un moyen de créer des sessions par lots / interactives avec SFTP. Postage comme réponse séparée, car je crois toujours que le moyen plus facile d'y aller est avec LFTP (voir autre réponse). Peut être utilisé sur le système sans LFTP

l'initiale EXEC Créer FD # 3 - pointant sur le stdout d'origine - probablement terminal utilisateur. Tout ce qui est envoyé à STDOUT sera exécuté par le SFTP dans le pipeline.

Le tuyau est nécessaire pour permettre à la fois que les deux processus fonctionnent simultanément. L'utilisation d'ici DOC entraînera une exécution séquentielle. La déclaration de sommeil est tenue de permettre à SFTP de terminer la récupération de données de l'hôte distant. xxx


1 commentaires

Cela fonctionne très bien avec une petite correction dans votre code, "" << eof doit être supprimé "



0
votes

Je vous suggère de créer un fichier avec le modèle des fichiers que vous souhaitez téléchargés, puis vous pouvez obtenir des fichiers téléchargés en une seule ligne:

sftp_connection_string <<< $ "LS -LRT" | grep -v '^ sftp '| grep -f modèle_file | awk' {imprimer $ 9} '| SED -E' S / ^ / get -p / g '| SFTP_Connection_string

S'il y a plusieurs dossiers définis à examiner, Ensuite: xxx

one-liner xxx

Permettez-moi de savoir si cela fonctionne. < / p>


0 commentaires