it-swarm.com.de

Führen Sie das Shell-Skript (mit Parametern) in der Windows-Befehlszeile über Plink aus

Ich muss ein Shell-Skript in der Linux-Box von Windows aus remote ausführen

#!/bin/bash
if [ "$#" -ne 1 ]; then

    echo "Illegal number of parameters"
    exit
fi
    echo "$1"

Hier ist der Befehl, den ich über die Windows-Eingabeaufforderung ausgeführt habe

 cmd>   plink.exe -ssh [email protected] -pw gbG32s4D/ -m C:\myscript.sh 5

Ich bekomme Ausgabe als 

"Unzulässige Anzahl von Parametern"

Gibt es eine Möglichkeit, Befehlszeilenparameter an das Shell-Skript zu übergeben, das auf einem Remote-Server ausgeführt wird?

7
aaditya 1985

Sie missverstehen, wie der -m-Schalter funktioniert.

Es ist nur eine Möglichkeit, plink die Befehle zu laden, die von einer lokalen Datei an den Server gesendet werden.

Die Datei wird NICHT auf dem Remote-Server hochgeladen und ausgeführt (mit Argumenten).

Der Inhalt wird lokal gelesen und an den Server gesendet und dort ausgeführt, als ob Sie ihn in eine (Remote-) Befehlszeile eingeben würden. Sie können es keine Argumente geben.


Eine Problemumgehung besteht darin, die Datei lokal zu generieren, bevor Sie plink aus einer Batchdatei (z. B. run.bat) ausführen:

echo echo %1 > script.tmp
plink.exe -ssh [email protected] -pw gbG32s4D/ -m script.tmp

Führen Sie dann die Batchdatei mit dem Argument aus:

run.bat 5

Durch das obige wird das Skript echo 5 auf dem Server ausgeführt.


Wenn das Skript komplex ist, anstatt es lokal zusammenzustellen, müssen Sie es auf dem Server bereitstellen (wie von @MarcelKuiper vorgeschlagen), und das Skript nur über Plink ausführen. 

plink.exe -ssh [email protected] -pw gbG32s4D/ "./myscript.sh %1"

Da wir nur einen Befehl ausführen, können Sie ihn in der Plink-Befehlszeile einschließlich der Argumente übergeben. Sie müssen den -m-Schalter nicht mit einer (temporären) Datei verwenden.

9
Martin Prikryl

Haben Sie versucht, den Befehl und das Argument in Anführungszeichen zu setzen:

-m "C:\myscript.sh 5"

0
Marcel Kuiper