Неважно, обнаружил, что это Windows, добавление недопустимых символов. С Notepad ++ сохранение под Unix / Linux работало как шарм.
файл сценария оболочки (.sh) - динамическая команда
925
pacojones
Я пытаюсь создать динамическую команду для выполнения в файле .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'
Который кажется идеальным.
Что я здесь не делаю?
Спасибо.
Попробуйте [подрезать] (http://stackoverflow.com/questions/4422491/how-do-i-trim-lines-read-from-standard-input-on-bash) свой ввод (удалить начальные / конечные пробелы)
Nifle 9 лет назад
0
1 ответ на вопрос
1
pacojones
Похожие вопросы
-
2
.profile в Mac OS X?
-
1
Приостановить все, кроме x задач, интенсивно использующих процессор
-
10
Как я могу найти в истории bash и повторно запустить команду?
-
-
2
Можно ли передать выходные данные одной команды двум другим командам?
-
10
Как настроить SSH, чтобы мне не приходилось вводить свой пароль?
-
3
Как я могу использовать ssh для запуска команды на удаленной машине Unix и выхода до ее завершения?
-
8
Переименуйте группу файлов одной командой
-
2
Почему мой путь не обновляется * сейчас *?
-
5
Как удалить символическую ссылку на каталог?
-
8
Спаси меня от бессмысленного терминала