Wenn das Skript kurz ist und in Ihr Skript eingebettet werden soll und Sie unter bash
Schale und auch bash
Shell auf der entfernten Seite verfügbar ist, können Sie declare
um den lokalen Kontext an die Gegenstelle zu übertragen. Definieren Sie Variablen und Funktionen, die den Zustand enthalten, der an die Gegenstelle übertragen werden soll. Definieren Sie eine Funktion, die auf der entfernten Seite ausgeführt werden soll. Dann in einem here-Dokument, das von bash -s
können Sie declare -p
um die Variablenwerte zu übertragen, und verwenden Sie declare -f
um Funktionsdefinitionen an die Fernbedienung zu übertragen.
Denn declare
kümmert sich um die Anführungszeichen und wird von der entfernten Seite geparst bash
werden die Variablen richtig zitiert und die Funktionen richtig übertragen. Sie können das Skript einfach lokal schreiben, normalerweise mache ich eine lange Funktion mit der Arbeit, die ich auf der entfernten Seite machen muss. Der Kontext muss von Hand ausgewählt werden, aber die folgende Methode ist "gut genug" für alle kurzen Skripte und ist sicher - sollte alle Eckfälle richtig behandeln.
somevar="spaces or other special characters"
somevar2="!@#$%^"
another_func() {
mkdir -p "$1"
}
work() {
another_func "$somevar"
touch "$somevar"/"$somevar2"
}
ssh user@server 'bash -s' <<EOT
$(declare -p somevar somevar2) # transfer variables values
$(declare -f work another_func) # transfer function definitions
work # call the function
EOT
7 Stimmen
Die gleiche Frage wurde bereits auf serverfault gestellt: serverfault.com/questions/215756/ Es hat also wahrscheinlich keinen Sinn, diese Frage zu migrieren.
9 Stimmen
Auf die Frage zu Server Fault gibt es allerdings nicht so viele Antworten. Vielleicht sollte diese Frage diese ersetzen.
5 Stimmen
Mir persönlich gefällt diese Antwort: unix.stackexchange.com/questions/87405/
27 Stimmen
Außerdem sollte es natürlich zum Thema passen, da ssh ein wichtiges Werkzeug für die Softwareentwicklung ist.
1 Stimmen
@tripleee, danke, dass Sie mich daran erinnern, eine "Wiedereröffnungs"-Stimme abzugeben.
5 Stimmen
Kaffee- und ssh-Fragen haben nicht den gleichen Grad an Off-Topicness auf SO. Ich habe für die Wiedereröffnung gestimmt.
0 Stimmen
Kann sich jemand zum ENDSSH-Tag äußern, bitte?
1 Stimmen
@adam-lear, ich denke, diese Frage sollte geöffnet werden. Ich habe die Frage so geändert, dass sie zu Stackoverflow passt. Die beliebteste Antwort hier funktioniert nicht wirklich, wenn man versucht, ein lokales Skript auf einem entfernten Widows-Rechner auszuführen und wenn es mehrere Zeilen hat. Ich habe einen Weg gefunden, und würde die Lösung gerne zur Verfügung stellen. Auch wenn es einen anderen Beitrag auf serverfault gibt, werden die meisten Leute wegen der Popularität dieser Frage hierher kommen, so dass es für die Besucher sehr hilfreich ist, sicherzustellen, dass diese Frage auf dem neuesten Stand ist.
1 Stimmen
@alpha_989 Das ist fair. Ich habe diese Frage in meinen noch nicht ganz zwei Monaten als Community-Moderator einseitig geschlossen. Das ist kein Berg, auf dem ich jetzt sterben möchte :) Ich werde sie wieder öffnen, obwohl das keine Garantie dafür ist, dass sie offen bleibt, wenn die Community im Allgemeinen nicht damit einverstanden ist. Wenn es wieder geschlossen wird, schlage ich vor, es zu Meta-Stapelüberlauf für eine Diskussion.