SSH heredoc: bash-Eingabeaufforderung
Ich bin versucht, schreiben Sie ein shell-Skript, welches SSHs in einen server und fordert den Benutzer dann zur Eingabe eines Datei/Ordner.
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 bin mit der heredoc-anstelle von doppelten Anführungszeichen nach dem SSH-um diese Befehle auszuführen, weil mein shell-script ist ziemlich groß und ich möchte nicht entkommen jedes doppelte Anführungszeichen ein.
Als ich mit doppelten Anführungszeichen, in der Eingabeaufforderung funktionierte gut. Aber nun, ich bin im Gebrauch der heredoc -, wird die Eingabeaufforderung nicht mehr funktioniert.
Was kann ich tun, um die Eingabeaufforderung zu arbeiten, mit der heredoc? Und wenn nicht, gibt es eine Möglichkeit, dass ich mein layout Skript, so dass die Eingabeaufforderung funktioniert ohne Verpackung, alles in Anführungszeichen und Escape-Zeichen, 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
"
InformationsquelleAutor | 2012-12-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nicht brauchen, jede Variable, die von der client-Seite, warum nicht versuchen - und
ssh -t
nützlich sein könnten.Beachten Sie, dass wenn Ihre einzige Problem mit doppelten Anführungszeichen, entkommen ist, und Sie nicht plan auf
mit
'
einfache Anführungszeichen in dein script, dann können Sie ust, dies zu tun:<<'EOF'
nur nimmt mich an die bash-Eingabeaufforderung innerhalb der SSH-server. Was ich eigentlich meinte, 'prompt' ist dies:read -e -p "Enter the path to the file: " FILEPATH
– sollte das script fordert den Benutzer für eine Datei.Ich war zunächst mit einfachen Anführungszeichen, aber dann habe ich keinen Zugriff auf die Variablen wie
$CLIENT
, die definiert wurde, bevor Sie den Befehl SSH.Hinzugefügt einen Vorschlag zu un-die Flucht "einfache Anführungszeichen". hässlich, aber Frage mich, ob es für Sie arbeitet?
Ihren Vorschlag über unescaping single-quotes arbeitet. Könnte hässlicher sein! Denke, dieses ist das beste was ich bekommen werde?
Gerade aktualisiert mein Erster Vorschlag - Sie haben zu entkommen remote (server-Seite) vars mit
\$varname
verlassen, während die lokal deklarierten Variablen, wie Sie sind.InformationsquelleAutor
dies funktioniert, Registerkarte Fertigstellung auf dem host funktioniert.
mir dies erstellt die Datei, in der Sie aufgefordert werden für Verzeichnis.
read -e -p \"Enter the path to the file: \" FILEPATH
versuchen Sie die aktualisierte version. dies funktioniert mit der Nachfrage.
aber die lese-Eingabeaufforderung lokal ausgeführt wird, was nicht richtig ist.
nur Feste. tab-Vervollständigung ist nun auf der anderen Seite.
InformationsquelleAutor
Machen, damit es funktioniert mit der heredoc, es sollte ausreichend sein, um berufen
bash
oder was auch immer-shell, die Sie verwenden möchten, auf dem remote-server. Etwa so:Beachten Sie, dass Sie wahrscheinlich wollen, um die Flucht der
$
aufFILEPATH
, da derzeit werden interpoliert, indem die lokale shell anstatt der remote-shell.InformationsquelleAutor
Dieser scheint zu funktionieren:
InformationsquelleAutor