
Ich möchte eine .sh-Datei ausführen, die ein Argument auf einem Linux-Rechner annimmt. Ich verwende plink.exe, um diese .sh-Datei von einem Windows-Rechner aus auszuführen. Aber ich weiß nicht, was ich in die Batchdatei schreiben muss, um plink.exe auszuführen, das wiederum die .sh-Datei und dieses Dateiargument ausführt.
Ich habe folgenden Batch-Befehl geschrieben:
@echo off
start C:\Users\Prateek\Desktop\PLINK.EXE -ssh -P 22 user@host -pw password sh -x "/home/user/copy.sh"
Beim Ausführen erhalte ich:
+ echo ''
+ echo 'Enter partner id'
Enter partner id
+ read pid
:
Eigentlich ist „Partner-ID eingeben“ das Argument, das ich übergeben muss.
Antwort1
Ich verstehe immer noch nicht ganz, was Sie wollen, aber ich werde ein paar Annahmen treffen, dann können wir sehen, wie es läuft ;-) Leider habe ich auch keine Windows-Shell zur Hand, daher könnte mein Batch-Foo ein wenig daneben liegen, insbesondere in Bezug auf Anführungszeichen, und das gilt umso mehr, wenn Dinge Leerzeichen enthalten. Änderungen sind willkommen.
Ich verstehe, dass Sie Ihrer Batchdatei ein Befehlszeilenargument bereitstellen möchten. Dieses ist dann in der Batchdatei als verfügbar
%1
.Ich gehe davon aus, dass die im vorherigen Absatz erhaltene Zeichenfolge dem UNIX-Shell-Skript als Eingabe übergeben werden sollte. Dies kann (beispielsweise) in der Login-Shell auf der Linux-Box erfolgen, indem ein Echo-Befehl an die zweite Shell weitergeleitet wird.
Versuchen Sie die folgende Änderung:
start C:\Users\Prateek\Desktop\PLINK.EXE -ssh -P 22 user@host -pw password echo %1 ^| sh -x "/home/user/copy.sh"
Wenn es als aufgerufen wird mybatch.bat SomeText
, sollte es Folgendes in einer Shell auf dem Remote-Host ausführen:
echo SomeText | sh -x /home/user/copy.sh
das ausgeführt wird und den Eindruck erweckt, dass jemand etwas über die Tastatur copy.sh
eingegeben hat .SomeText