Вызов rsync в bash из командной строки Windows

Я пытаюсь запустить rsync из пакетного файла. Команда

SET CMD="rsync -P -rptz --delete -e 'ssh -i /root/.ssh/CERTIFICATE.pem' SOURCE_ADDRESS  /mnt/c/Users/MYNAME/IdeaProjects/PROJECT/SUBFOLDER/SUBFOLDER/SUBFOLDER/SUBFOLDER/LASTFOLDER"

bash %CMD%

Это отлично работает, если я запускаю команду после ввода bash, но когда я запускаю команду из cmd с предшественником bash, появляется сообщение Нет такого файла или каталога.

Кроме того, при игре и попытке отладки bash зависает... т.е. если я открываю bash, я не получаю подсказки, просто мигающий курсор.

Любая помощь приветствуется.

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
0
1 525
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы запустить команду с помощью bash, вам нужно использовать -c вариант

bash -c "%CMD%"

Без этого первый параметр, не являющийся опцией, будет рассматриваться как сценарий оболочки *.sh, который rsync не является и вызовет ошибку.

If arguments remain after option processing, and neither the -c nor the -s option has been supplied, the first argument is assumed to be the name of a file containing shell commands.

Обратите внимание, что cmd в Windows не является DOS, хотя у них есть несколько похожих команд. Остальные сильно отличаются

Спасибо, я обнаружил, что запуск с параметром -c не дает --info=progress2 информации... или, может быть, это было из-за проблемы с мигающим курсором, описанной выше. Тем не менее, это работает на 100%. Еще одно решение, которое я нашел, отделить CMD от сценария оболочки, и вы можете запустить его без -c. Похоже, это вызвало конфликты разрешений Windows/Linux, и создание файла wsl.config, похоже, исправило это.

gunslingor 22.05.2019 21:50

--info=progress2 отлично работает на моем ПК. Вероятно, некоторые проблемы с вашим rsync, который останавливает печать прогресса в неинтерактивном режиме, потому что он думает, что вывод может быть файлом. Вместо этого попробуйте bash -i или bash --init-file <(echo "rsync -- .."). Но для этого вам даже не нужен rsync. Есть встроенный роботокопирование точно для той же цели, или можно установить rsync для Windows

phuclv 23.05.2019 02:07

Да, это работает, я исправлен. Однако независимо от того, что я делаю после запуска своего первого rsync, у меня появляется мигающий курсор, а не ошибка запроса, поэтому мой пакетный скрипт полностью зависает при попытке выполнить второй rsync. Даже если я открою второй ubuntu на терминале Windows, у меня все равно возникнет проблема с мигающим курсором. Я пробовал это с оператором выхода и без него в моих сценариях оболочки, которые вызываются из командного файла, с параметром -c и без него. Я могу только перезапустить, чтобы исправить это ... кажется, что единственный способ запустить оба - это ввести bash и вставить обе команды rsync, больше ничего не работает.

gunslingor 23.05.2019 15:52

У меня все еще есть эта проблема с зависанием Ubuntu, она просто полностью останавливается после первой команды rsync, и я вынужден перезапустить (один командный файл, вызывающий 2 однострочных файла командной оболочки rsync, с shebang ... мой мозг говорит мне, что это EOL проблема, но файлы sh используют LF, а пакет использует CRLF). Вы говорите, что вместо этого можно использовать robocopy? Имейте в виду, что источником и/или местом назначения обычно является удаленный сервер aws linux. Верно ли это по-прежнему, и если да, то как мне преобразовать текущую команду (это облегчило бы жизнь)?

gunslingor 24.05.2019 14:10

это другая проблема, поэтому, пожалуйста, задайте другой вопрос. Это может быть более подходящим для Спросите Ubuntu. И если вы можете создать общий ресурс samba, вы можете использовать robocopy. Robocopy для копирования файлов и папок между местами в Windows и UNIX.

phuclv 24.05.2019 14:20

Другие вопросы по теме