CMD
Утилита Windows имеет ряд внутренних команд, таких как mklink
. Как их можно использовать из msys
оболочки?
Из CMD
документации «S , то /c
переключатель может быть использован для выполнения команды и выхода; но это не похоже на работу.
- Если я команда не выполняется и оболочка не вышло.
cmd /c mklink
mklink
CMD
Перед нажатием Enter:
После:
Скриншот монитора процесса:
- Попытка выполнить команду как фоновый процесс: по-
cmd /c mklink &
видимому, работает -mklink
команда выполняется, ноCMD
оболочка не завершена. Каждый раз, когдаEnter
нажата,CMD
станет активной оболочки.
command-line
msysgit
msys
Михай Ротару
источник
источник
cmd /c mklink
работает для меня с моей оболочкой C, с Cygwinbash
и сcmd.exe
. Но я должен был работать с повышенными правами, иначе я получил жалобы: «У вас недостаточно прав для выполнения этой операции». Я не пробовал,msys
потому что у меня не установлено, но я скептически отношусь к этой проблеме. Я подозреваю, что происходит что-то еще. Может быть полезна расшифровка или скриншот того, что вы сделали и что случилось.mklink
работать, оболочка действительно должна быть запущена от имени администратора; но моя проблема в том, что я не могу выполнить ни одну из внутренних команд без того, чтобыcmd
оболочка не перешла в режим фоновой обработки. Эта проблема также присутствует для более простых команд, которые не требуют администратора, таких какdir
.cmd
?msys
конвертировать/c
вc:\
. Ответ состоит в том, чтобы избежать этого, и выполнить команду какcmd //c mklink
.Ответы:
Найдите в% PATH% cmd.cmd или cmd.bat. Они могут мешать вашему cmd
Запустите Process Monitor и запустите свой
cmd /c mklink
. Изучите журнал ProcMon для действительно выполненных команд.источник
msys
что преобразуется/c
вc:\
; это должно быть экранированоcmd //c mklink
. Способ, которым эти преобразования сделаны, объяснен здесь .В win7 / cygwin / bash возникла та же проблема, решение состоит в том, чтобы дважды запустить cmd и преобразовать косую черту в обратную косую черту, если это необходимо для cmd (например):
REPO_DIR=${REPO_DIR////\\} # Example, Turn c:/cvs into c:\cvs for cmd
cmd /C "cmd /C mklink /D .Repo $REPO_DIR" # launch cmd /C cmd /C cmd
источник
Я не мог заставить это работать на основе одного только комментария Михая , потому что путь все еще содержал косые черты
/
в нем, иmklink
жаловался, что/msys64
это не было допустимым переключением.Поэтому я написал пакетный скрипт, чтобы он заработал.
Вот как я называю свой пакетный скрипт из MSYS:
И пакетный сценарий принимает эти два пути и преобразует
/
их\
, используя:OLD=NEW
синтаксис расширения параметров для замены строк. 11 Это похоже на
${PARAM:/OLD/NEW}
синтаксис bash для тех, кто с ним знакомисточник