Почему plink или bash не распознают команду в первой строке файла удаленных команд?

Почему plink или bash не распознают команду в первой строке файла удаленных команд?

Я использую plink и pageant в PowerShell для подключения и выполнения команд на машине Linux через ssh. В скрипте PS я пытаюсь предоставить файл скрипта unix для plink следующим образом.

тест.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

Проблема была в самом файле скрипта оболочки, который начинался с Byte Order Mark, что мешало интерпретации его первой строки. Создание файла, который не начинался с этого символа, решило проблему.

Связанный контент