
Estoy usando plink y pageant en PowerShell para conectarme y ejecutar comandos en una máquina Linux a través de ssh. Dentro del script PS, estoy intentando proporcionar un archivo de script Unix para vincularlo de la siguiente manera.
prueba.ps1:
$remote_cmd_file = "test.sh"
pageant $priv_key
plink $usr@$dom -batch -m $remote_cmd_file
(Las variables $usr, $dom y $priv_key están definidas correctamente pero no se proporcionan aquí).
El contenido completo del archivo "test.sh" es:
cd /
pwd
Obtengo el resultado:
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
claramente la segunda línea se ejecutó pero la primera no.
Si comienzo "test.sh" con una línea en blanco, aparece un mensaje similar pero ambos comandos se ejecutan. Obtengo el resultado:
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, cuando comienzo el script con una línea como
#!/bin/bash
entonces entiendo
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
/
pero las líneas que comienzan con # en cualquier otro lugar del script se interpretan correctamente como comentarios y no producen ningún resultado.
Esto parece un problema con plink o quizás bash, pero no pude encontrar ninguna pregunta al respecto. Como solución alternativa, parece que puedo asegurarme de que todos mis comandos se ejecuten dejando la primera línea en blanco, pero la advertencia es molesta y me pregunto qué causa esta peculiaridad.
En caso de que sea útil, mi objetivo final es hacer que este script envíe trabajos en la máquina remota a través de slurm, transformando algunos archivos y luego, dentro del mismo script de PowerShell, trabajar con esos archivos en la máquina local donde puedo llamar a varios programas de Windows en ellos. desde la línea de comando.
Respuesta1
El problema estaba en el propio archivo del script de shell, que comenzaba con una marca de orden de bytes que interfería con la interpretación de su primera línea. Crear un archivo que no comenzara con ese carácter resolvió el problema.