SSH heredoc: invite de bash
J'essaie d'écrire un script shell qui Se sur un serveur, puis invite l'utilisateur à entrer un fichier/dossier.
ssh $SERVER <<EOF
cd downloads/
read -e -p "Enter the path to the file: " FILEPATH
echo $FILEPATH
eval FILEPATH="$FILEPATH"
echo "Downloading $FILEPATH to $CLIENT"
EOF
Je suis en utilisant heredoc au lieu de guillemets après le SSH pour exécuter ces commandes, car mon script shell est plutôt grande et je ne veux pas être échapper à tous les guillemets.
Quand j'ai été en utilisant des guillemets doubles, les invite a bien fonctionné. Cependant, maintenant que je suis en utilisant heredoc, l'invite ne fonctionne plus.
Que puis-je faire pour obtenir l'invite à travailler avec heredoc? Et si non, est-il possible que je mise mon script, de sorte que l'invite fonctionne sans enrouler le tout avec des guillemets, et s'en échappe, comme suit:
ssh $SERVER "
cd downloads/
read -e -p \"Enter the path to the file: \" FILEPATH
echo $FILEPATH
eval FILEPATH=\"$FILEPATH\"
echo \"Downloading $FILEPATH to $CLIENT\"
exit
"
source d'informationauteur | 2012-12-18
Vous devez vous connecter pour publier un commentaire.
Si vous n'avez pas besoin de toutes les variables de la part du client, pourquoi ne pas essayer - et
ssh -t
pourrait être utile.Notez que si votre seul problème avec les guillemets est de fuir, et vous n'envisagez pas de l'
à l'aide de
'
des guillemets simples dans votre script, vous pouvez ust ce faire:cela fonctionne, la saisie semi-automatique sur l'ordinateur hôte fonctionne.
sur la mienne cela crée le fichier PRÉSENT dans l'invité de répertoire.
Celui-ci semble fonctionner:
À le faire fonctionner avec un heredoc, il devrait être suffisant pour invoquer
bash
ou quel que soit le shell que vous voulez utiliser sur le serveur distant. Comme:Notez que vous voulez probablement pour échapper à la
$
surFILEPATH
puisque, actuellement, qui seront interpolées par le shell local plutôt que le shell distant.