web-dev-qa-db-fra.com

Quelle est la signification des commandes "spawn" de Linux Shell? (Centos6)

J'ai besoin de savoir comment configurer un travail cron qui se connecte automatiquement au serveur distant, modifie le répertoire et récupère tous les fichiers de ce répertoire au niveau local.

je pense que je dois utiliser sftp mais j'ai vu des commandes appelées "spawn" dans certains scripts Shell et je ne comprends pas ce que cela va faire et à quoi ça sert?

spawn  sftp user@ipaddress
cd xxx/inbox
mget *

cela fonctionnera-t-il dans le contexte du répertoire de téléchargement distant?

6
user1179459

Dans votre cas, spawn est très probablement une commande de attend langage de script qui permet l’automatisation des opérations de programme interactives. Dans un tel cas, spawn exécute une commande externe à partir du script prévu. Il manque dans votre exemple de script une séquence Shebang (première ligne commençant par #!) indiquant l'interprète expect et en tant que tel ne sera pas interprété par expect lorsqu’il est exécuté directement.

L'authentification par mot de passe avec sftp est limitée au mode interactif. Pour contrôler sftp en mode interactif, vous pouvez utiliser par exemple le script attendu suivant:

#!/usr/bin/env expect
set timeout 20    # max. 20 seconds waiting for the server response

set user username
set pass your-pass
set Host the-Host-address
set dir  server-dir

spawn sftp $user@$Host
expect assword:

send "$pass\r"
expect sftp>

send "cd $dir\r"
expect sftp>

send "mget *\r"
expect sftp>

send "exit\r"
expect eof

Une autre possibilité consiste à utiliser l'authentification par clé publique, qui est également plus sécurisée (voir procédure ). Dans ce cas, vous pouvez simplement utiliser sftp directement en mode de traitement par lots:

#!/bin/sh
user=username
Host=the-Host-address
dir=server-dir

sftp -b - "$user@$Host" <<+++EOF+++
cd "$dir"
mget *
exit
+++EOF+++
5
pabouk