Как предотвратить MSYS от преобразования удаленного пути к файлу для PSCP

Я использую msys2 bash 4.3.26 (i686-pc-msys) на Windows, и недавно я обнаружил, что это ломает мой pscp а также scp (msys1):

Когда я бегу pscp req.py hostname:/home/user/xxx/yyy/:

  • msys изменит второй аргумент на hostname;D:\msys\home\user\xxx\yyy\
  • а потом pscp сообщит: ssh_init: Host does not exist
  • мой scp которая из msys-1.0 (я когда-то использовал git-for-windows 1.9) сообщает ssh: Could not resolve hostnamehostname;d: no address associated with name

Это раздражает, и я должен открыть cmd.exe использовать pscp, Есть ли способ предотвратить преобразование MSYS 2 специальных аргументов?

  • Я пытался обернуть арг в ' или же " и не удалось
  • http://www.mingw.org/wiki/Posix_path_conversion не помогает, но разочаровывает
  • среда: Windows 10 Insider x64 и msys2 i686
  • официальный scp.exe в той же упаковке msys2 работает хорошо

Кстати, эта проблема возникает только на тех файлах.exe, которые не используют библиотеки msys2. Как эта разница проверяется?

1 ответ

Решение

MSYS2 преобразует имена путей в стиле POSIX в имена путей в стиле Windows, когда обнаруживает, что вы запускаете собственную программу Windows, такую ​​как pscp. Эти преобразования используют много эвристики, и иногда они получают неправильный ответ.

Вы можете запретить преобразования определенных аргументов, установив MSYS2_ARG_CONV_EXCL переменная окружения при запуске команды. Это список префиксов аргументов, для которых MSYS2 не должен пытаться преобразовать пути. Вы можете просто установить переменную в пустую строку, чтобы отключить все преобразования. Однако вам может понадобиться преобразовать первый аргумент в pscp, так как это путь на вашем локальном компьютере. Так что вместо этого вы должны попробовать выполнить команду:

MSYS2_ARG_CONV_EXCL=hostname pscp req.py hostname:/home/user/xxx/yyy/
Другие вопросы по тегам