Я пытаюсь запустить 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, я не получаю подсказки, просто мигающий курсор.
Любая помощь приветствуется.
Чтобы запустить команду с помощью 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, хотя у них есть несколько похожих команд. Остальные сильно отличаются
--info=progress2
отлично работает на моем ПК. Вероятно, некоторые проблемы с вашим rsync, который останавливает печать прогресса в неинтерактивном режиме, потому что он думает, что вывод может быть файлом. Вместо этого попробуйте bash -i
или bash --init-file <(echo "rsync -- ..")
. Но для этого вам даже не нужен rsync. Есть встроенный роботокопирование точно для той же цели, или можно установить rsync для Windows
Да, это работает, я исправлен. Однако независимо от того, что я делаю после запуска своего первого rsync, у меня появляется мигающий курсор, а не ошибка запроса, поэтому мой пакетный скрипт полностью зависает при попытке выполнить второй rsync. Даже если я открою второй ubuntu на терминале Windows, у меня все равно возникнет проблема с мигающим курсором. Я пробовал это с оператором выхода и без него в моих сценариях оболочки, которые вызываются из командного файла, с параметром -c и без него. Я могу только перезапустить, чтобы исправить это ... кажется, что единственный способ запустить оба - это ввести bash и вставить обе команды rsync, больше ничего не работает.
У меня все еще есть эта проблема с зависанием Ubuntu, она просто полностью останавливается после первой команды rsync, и я вынужден перезапустить (один командный файл, вызывающий 2 однострочных файла командной оболочки rsync, с shebang ... мой мозг говорит мне, что это EOL проблема, но файлы sh используют LF, а пакет использует CRLF). Вы говорите, что вместо этого можно использовать robocopy? Имейте в виду, что источником и/или местом назначения обычно является удаленный сервер aws linux. Верно ли это по-прежнему, и если да, то как мне преобразовать текущую команду (это облегчило бы жизнь)?
это другая проблема, поэтому, пожалуйста, задайте другой вопрос. Это может быть более подходящим для Спросите Ubuntu. И если вы можете создать общий ресурс samba, вы можете использовать robocopy. Robocopy для копирования файлов и папок между местами в Windows и UNIX.
Спасибо, я обнаружил, что запуск с параметром -c не дает --info=progress2 информации... или, может быть, это было из-за проблемы с мигающим курсором, описанной выше. Тем не менее, это работает на 100%. Еще одно решение, которое я нашел, отделить CMD от сценария оболочки, и вы можете запустить его без -c. Похоже, это вызвало конфликты разрешений Windows/Linux, и создание файла wsl.config, похоже, исправило это.