As janelas CMD
utilitário tem um número de comandos internos, como mklink
. Como eles podem ser usados a partir do msys
Concha ?
De CMD
documentação do , a /c
switch pode ser usado para executar um comando e
Saída; mas isso não parece funcionar.
- Se eu fizer
cmd /c mklink
amklink
comando não é executado e oCMD
shell não é encerrado.
Antes de pressionar Enter:
Depois de:
Captura de tela do Process Monitor:
- Tentando executar o comando como um processo em segundo plano:
cmd /c mklink &
aparentemente funciona - omklink
comando é executado, mas oCMD
shell não está terminado. Toda vezEnter
é pressionadoCMD
vai se tornar o shell ativo.
command-line
msysgit
msys
Mihai Rotaru
fonte
fonte
cmd /c mklink
funciona para mim com minha shell C, com Cygwinbash
e comcmd.exe
. Mas eu tenho que estar correndo em alta ou então eu tenho queixas, "Você não tem privilégio suficiente para realizar esta operação." Eu não tenteimsys
porque eu não tenho instalado, mas sou cético que é o problema. Eu suspeito que há algo mais acontecendo. Uma transcrição ou uma captura de tela do que você fez e o que aconteceu pode ser útil.mklink
para funcionar, o shell precisa ser executado como administrador; mas meu problema é que eu não posso executar nenhum dos comandos internos sem ocmd
shell assumindo ou executando em segundo plano. Esse problema também está presente para comandos mais simples que não requerem administração, comodir
.cmd
?msys
converte/c
parac:\
. A resposta é escapar e executar o comando comocmd //c mklink
.Respostas:
Pesquise seu% PATH% para cmd.cmd ou cmd.bat. Eles podem interferir com o seu cmd
Corre Monitor de processo e execute o seu
cmd /c mklink
. Examine o log do ProcMon para comandos realmente executados.fonte
msys
vai converter/c
parac:\
; precisa ser escapado:cmd //c mklink
. A maneira como essas conversões são feitas é explicada Aqui .win7 / cygwin / bash teve o mesmo problema, a solução é lançar cmd duas vezes, e converta barras em barras invertidas conforme necessário por cmd (por exemplo):
REPO_DIR=${REPO_DIR////\\} # Example, Turn c:/cvs into c:\cvs for cmd
cmd / C "cmd / mklink c / D.Repo $ REPO_DIR" # cmd lançamento / C cmd / C cmd
fonte
Eu não consegui fazer isso funcionar com base em Comentário de Mihai sozinho, porque o caminho ainda continha barras
/
nele emklink
reclamou que/msys64
não era um interruptor válido.Então eu escrevi um script em lote para fazê-lo funcionar.
Aqui está como eu chamo meu script em lote do MSYS:
E o script em lote usa esses dois caminhos e converte
/
para\
, usando o:OLD=NEW
sintaxe de expansão de parâmetro para substituições de string. 11 Isso é semelhante ao bash
${PARAM:/OLD/NEW}
sintaxe, para aqueles familiarizados com elefonte