Por que o plink ou o bash não reconhece o comando na primeira linha do arquivo de comandos remotos?

Por que o plink ou o bash não reconhece o comando na primeira linha do arquivo de comandos remotos?

Estou usando plink e pageant no PowerShell para conectar e executar comandos em uma máquina Linux via ssh. Dentro do script PS, estou tentando fornecer um arquivo de script unix para plink da seguinte maneira.

teste.ps1:

$remote_cmd_file = "test.sh"

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

(As variáveis ​​$usr, $dom e $priv_key estão definidas corretamente, mas não são fornecidas aqui.)

Todo o conteúdo do arquivo "test.sh" é:

cd /
pwd

Eu recebo a saída:

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

tão claramente que a segunda linha foi executada, mas a primeira não.

Se eu iniciar "test.sh" com uma linha em branco, recebo uma mensagem semelhante, mas ambos os comandos são executados. Eu recebo a saída:

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

/

Finalmente, quando inicio o script com uma linha como

#!/bin/bash

então eu recebo

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

/

mas as linhas que começam com # em qualquer outro lugar do script são interpretadas corretamente como comentários e não produzem saída.

Isso parece ser um problema com o plink ou talvez com o bash, mas não consegui encontrar nenhuma dúvida sobre isso. Como solução alternativa, parece que posso garantir que todos os meus comandos sejam executados deixando a primeira linha em branco, mas o aviso é irritante e estou me perguntando o que causa essa peculiaridade.

Caso seja útil, meu objetivo final é fazer com que esse script envie trabalhos na máquina remota via slurm, transformando alguns arquivos e, dentro do mesmo script do PowerShell, trabalhe com esses arquivos na máquina local, onde posso chamar vários programas do Windows neles na linha de comando.

Responder1

O problema estava no próprio arquivo de script de shell, que começava com uma marca de ordem de bytes que interferia na interpretação de sua primeira linha. Criar um arquivo que não começasse com esse caractere resolveu o problema.

informação relacionada