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:
3 Réponses :
L'approche ci-dessus ne fonctionnera pas. N'oubliez pas que le "Ici Document" ( envisager d'utiliser en théorie, vous pouvez créer des constructions similaires avec des tuyaux et Bien sûr, l'autre alternative consiste à créer des sessions différentes << eof ... EOF code>) est évalué comme entrée dans la session
SFTP code>. Les invites seront affichées et une entrée de l'utilisateur sera demandée avant toute sortie (
ls code> dans ce cas) sera disponible auprès de SFTP.
lftp code>, qui a plus construction flexible. En particulier, il vous permettra d'utiliser des variables, de créer une commande de manière dynamique, etc. p>
SFTP code> (Peut être un co-processus?), mais c'est beaucoup plus difficile. P>
SFTP code> pour la liste, mais cela coûtera cher / inefficace. p> p>
LFTP n'est pas installé, mais la réponse ci-dessous a bien fonctionné
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 fort> (voir autre réponse). Peut être utilisé sur le système sans LFTP l'initiale 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. P> EXEC code> 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. P>
Cela fonctionne très bien avec une petite correction dans votre code, "" << eof doit être supprimé "
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 p>
S'il y a plusieurs dossiers définis à examiner, Ensuite: p> one-liner strong> p> Permettez-moi de savoir si cela fonctionne. < / p> p>
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.