plink 또는 bash가 원격 명령 파일의 첫 번째 줄에 있는 명령을 인식하지 못하는 이유는 무엇입니까?

plink 또는 bash가 원격 명령 파일의 첫 번째 줄에 있는 명령을 인식하지 못하는 이유는 무엇입니까?

저는 PowerShell에서 plink와 pageant를 사용하여 ssh를 통해 Linux 시스템에 연결하고 명령을 실행하고 있습니다. PS 스크립트 내에서 다음과 같이 plink할 unix 스크립트 파일을 제공하려고 합니다.

테스트.ps1:

$remote_cmd_file = "test.sh"

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

(변수 $usr, $dom 및 $priv_key는 올바르게 정의되어 있지만 여기에는 제공되지 않습니다.)

"test.sh" 파일의 전체 내용은 다음과 같습니다.

cd /
pwd

나는 출력을 얻습니다 :

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

두 번째 줄은 분명히 실행되었지만 첫 번째 줄은 실행되지 않았습니다.

대신 빈 줄로 "test.sh"를 시작하면 비슷한 메시지가 표시되지만 두 명령이 모두 실행됩니다. 나는 출력을 얻습니다 :

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

/

마지막으로 다음과 같은 줄로 스크립트를 시작하면

#!/bin/bash

그러면 나는 얻는다

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

/

그러나 스크립트의 다른 곳에서 #으로 시작하는 줄은 주석으로 올바르게 해석되어 출력이 생성되지 않습니다.

이것은 plink나 bash의 문제인 것 같지만 이에 대한 기존 질문을 찾을 수 없었습니다. 해결 방법으로 첫 번째 줄을 비워 두어 모든 명령이 실행되도록 할 수 있는 것처럼 보이지만 경고가 짜증나고 이 문제의 원인이 무엇인지 궁금합니다.

도움이 될 경우 최종 목표는 이 스크립트를 통해 slurm을 통해 원격 컴퓨터에 작업을 제출하고 일부 파일을 변환한 다음 동일한 PowerShell 스크립트 내에서 로컬 컴퓨터의 해당 파일을 사용하여 다양한 Windows 프로그램을 호출할 수 있도록 하는 것입니다. 명령줄에서.

답변1

문제는 첫 번째 줄의 해석을 방해하는 바이트 순서 표시로 시작되는 쉘 스크립트 파일 자체에 있었습니다. 해당 문자로 시작하지 않는 파일을 생성하면 문제가 해결되었습니다.

관련 정보