Warum erkennen Plink oder Bash den Befehl in der ersten Zeile der Remote-Befehlsdatei nicht?

Warum erkennen Plink oder Bash den Befehl in der ersten Zeile der Remote-Befehlsdatei nicht?

Ich verwende plink und pageant in PowerShell, um eine Verbindung zu einem Linux-Rechner über SSH herzustellen und Befehle auszuführen. Innerhalb des PS-Skripts versuche ich, plink wie folgt eine Unix-Skriptdatei bereitzustellen.

test.ps1:

$remote_cmd_file = "test.sh"

pageant $priv_key
plink $usr@$dom -batch -m $remote_cmd_file

(Die Variablen $usr, $dom und $priv_key sind richtig definiert, werden hier aber nicht angegeben.)

Der gesamte Inhalt der Datei „test.sh“ ist:

cd /
pwd

Ich erhalte die Ausgabe:

plink : bash: cd: command not found
At C:\workspace\test.ps1:8 char:1
+ plink $usr@$dom -batch -m $remote_cmd_file
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (bash: cd: command not found:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

/my/remote/home/directory

also wurde die zweite Zeile eindeutig ausgeführt, die erste jedoch nicht.

Wenn ich stattdessen „test.sh“ mit einer leeren Zeile starte, erhalte ich eine ähnliche Meldung, aber beide Befehle werden ausgeführt. Ich erhalte die Ausgabe:

plink : bash: : command not found
At C:\workspace\test.ps1:8 char:1
+ plink $usr@$dom -batch -m $remote_cmd_file
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (bash: : command not found:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

/

Wenn ich das Skript mit einer Zeile wie dieser starte

#!/bin/bash

dann bekomme ich

plink : bash: #!/bin/bash: No such file or directory
At C:\workspace\test.ps1:8 char:1
+ plink $usr@$dom -batch -m $remote_cmd_file
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (bash: #!/bin...le or directory:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError

/

Aber Zeilen, die an einer anderen Stelle im Skript mit # beginnen, werden korrekt als Kommentare interpretiert und erzeugen keine Ausgabe.

Dies scheint ein Problem mit Plink oder vielleicht Bash zu sein, aber ich konnte keine vorhandenen Fragen dazu finden. Als Workaround kann ich anscheinend sicherstellen, dass alle meine Befehle ausgeführt werden, indem ich die erste Zeile leer lasse, aber die Warnung ist ärgerlich und ich frage mich, was diese Eigenart verursacht.

Falls es hilfreich ist: Mein letztendliches Ziel besteht darin, dieses Skript dazu zu bringen, Aufträge über Slurm an den Remotecomputer zu übermitteln, einige Dateien zu transformieren und dann innerhalb desselben PowerShell-Skripts mit diesen Dateien auf dem lokalen Computer zu arbeiten, wo ich über die Befehlszeile verschiedene Windows-Programme darauf aufrufen kann.

Antwort1

Das Problem lag in der Shell-Skriptdatei selbst, die mit einer Byte-Order-Markierung begann, die die Interpretation der ersten Zeile beeinträchtigte. Das Erstellen einer Datei, die nicht mit diesem Zeichen begann, löste das Problem.

verwandte Informationen