Ich versuche, ein Shell-Skript zu schreiben, die SSH in einen Server und fordert dann den Benutzer auf, eine Datei/einen Ordner einzugeben.SSH heredoc: bash prompt
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
Ich verwende heredoc statt doppelte Anführungszeichen nach dem SSH diese Befehle auszuführen, weil mein Shell-Skript ist ziemlich groß, und ich will nicht jedes doppelte Anführungszeichen zu entkommen werden.
Wenn ich doppelte Anführungszeichen verwendete, funktionierte die Eingabeaufforderung gut. Jetzt, da ich heredoc benutze, funktioniert die Eingabeaufforderung nicht mehr.
Was kann ich tun, um die Eingabeaufforderung für die Arbeit mit Heredoc zu erhalten? Und wenn nicht, ist es eine Möglichkeit, meine Skript-Layout, so dass die Eingabeaufforderung funktioniert ohne alles in doppelten Anführungszeichen zu wickeln und zu entkommen, etwa so:
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
"
Wenn ich es in '' ''EOF'' ändere, komme ich einfach zur bash-Eingabeaufforderung innerhalb des SSH-Servers. Was ich eigentlich mit 'prompt' meinte, ist dies: 'read -e -p 'Geben Sie den Pfad zur Datei ein:" FILEPATH "- das Skript sollte den Benutzer nach einer Datei fragen. –
Ich habe anfangs einfache Anführungszeichen verwendet, aber dann kann ich nicht auf Variablen wie '$ CLIENT' zugreifen, die vor dem SSH-Befehl definiert wurden. –
Es wurde ein Vorschlag zum Deaktivieren von einfachen Anführungszeichen hinzugefügt. hässlich, aber frage mich, ob es für dich funktioniert? – Faiz