1

Я пытаюсь создать динамическую команду для выполнения в файле .sh, однако, когда я делаю это, кажется, что каким-то образом она добавляет символы \r, поэтому команда выполняется неправильно.

Обратите внимание, что я запускаю это поверх окон, используя bash.exe. Образец кода:

Мой файл command.cmd:

bash --login -x command.sh Parameter1

Мой файл .sh:

#!/bash
#export PATH=.
cmd="ssh-agent bash -c 'ssh-add /cygdrive/C/$1/id_rsa & lftp -u myUser, -e \"mirror --verbose / /cygdrive/C$1/Output; bye\" sftp://domain.com -p 22'"
eval "$cmd"

Если я запускаю команду статически, она отлично работает:

ssh-agent bash -c 'ssh-add /cygdrive/C/$1/id_rsa & lftp -u myUser, -e \"mirror --verbose / /cygdrive/C$1/Output; bye\" sftp://domain.com -p 22'

Но если я запускаю его как есть в файле .sh, он выдает следующее:

C:\MyFolder\bin>command.cmd

C:\MyFolder\bin>bash --login -x command.sh Parameter1
+ cmd='ssh-agent bash -c '\''ssh-add /cygdrive/C/Parameter1/id_rsa & lftp -
u myUser, -e "mirror --verbose / /cygdrive/C/Parameter1/Output; bye" sft
'://sftp.domain.com -p 22'\''
+ eval 'ssh-agent bash -c '\''ssh-add /cygdrive/C/Parameter1/id_rsa & lftp
-u myUser, -e "mirror --verbose / /cygdrive/C/Parameter1/Output; bye" sf
'p://sftp.domain.com -p 22'\''
++ ssh-agent bash -c 'ssh-add /cygdrive/C/Parameter1/id_rsa & lftp -u myUser, -e "mirror --verbose / /cygdrive/Parameter1/Output; bye" sftp://sft
'.domain.com -p 22
Identity added: /cygdrive/id_rsa (rsa w/o comment)
'] `/' [Bad port '22.]

Я предполагаю, что, поскольку это выполняется в Windows, что-то не очень хорошо сформировано в динамической переменной команды, поэтому команда работает неправильно. Если вместо Eval я выполняю эхо, вывод:

C:\MyFolder\bin>command.cmd

C:\MyFolder\bin>bash --login -i command.sh Parameter1
ssh-agent bash -c 'ssh-add /cygdrive/C/Parameter1/id_rsa & lftp -u myUser, -e "mirror --verbose / /cygdrive/C/Parameter1/Output; bye" sftp://sftp.domain.com -p 22'

Который кажется идеальным.

Что я здесь не делаю?

Спасибо.

1 ответ1

1

Неважно, обнаружил, что это Windows, добавление недопустимых символов. С Notepad++ сохранение под Unix/Linux работало как шарм.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .