La CMDutilidad de Windows tiene una serie de comandos internos, como mklink. ¿Cómo se pueden usar desde la msyscáscara?
De CMDla documentación de , el /cinterruptor se puede utilizar para ejecutar un comando y salir; Pero esto no parece funcionar.
- Si lo hago,
cmd /c mklinkelmklinkcomando no se ejecuta yCMDno se cierra el shell.
Antes de presionar Enter:

Después:

Captura de pantalla de Process Monitor:

- Intentar ejecutar el comando como un proceso en segundo plano:
cmd /c mklink &aparentemente funciona: elmklinkcomando se ejecuta, pero elCMDshell no finaliza. Cada vez queEnterse presiona,CMDse convertirá en el shell activo.
command-line
msysgit
msys
Mihai Rotaru
fuente
fuente

cmd /c mklinkfunciona para mí con mi shell C, con Cygwinbashy concmd.exe. Pero tenía que estar funcionando de forma elevada o de lo contrario recibí quejas, "No tienes privilegios suficientes para realizar esta operación". No lo he intentadomsysporque no lo tengo instalado, pero estoy escéptico de que ese sea el problema. Sospecho que está sucediendo algo más. Puede ser útil una transcripción o una captura de pantalla de lo que hizo y lo que sucedió.mklinkque funcione, el shell realmente debe ejecutarse como administrador; pero mi problema es que no puedo ejecutar ninguno de los comandos internos sin que elcmdshell se haga cargo o se ejecute en segundo plano. Este problema también está presente para comandos más simples que no requieren administrador, comodir.cmd?msyslos convertidos/cac:\. La respuesta es escapar y ejecutar el comando comocmd //c mklink.Respuestas:
Busque en su% PATH% cmd.cmd o cmd.bat. Pueden interferir con su cmd
Ejecute Process Monitor y ejecute su
cmd /c mklink. Examine el registro de ProcMon en busca de comandos realmente ejecutados.fuente
msysva a convertir/cac:\; necesita ser escapado:cmd //c mklink. La forma en que se realizan estas conversiones se explica aquí .win7 / cygwin / bash tuvo el mismo problema, la solución es iniciar cmd dos veces y convertir barras inclinadas en barras invertidas según sea necesario por cmd (por ejemplo):
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
fuente
No pude lograr que esto funcionara solo por el comentario de Mihai , porque el camino todavía contenía barras diagonales
/, y semklinkquejó de que/msys64no era un cambio válido.Entonces escribí un script por lotes para que funcione.
Así es como llamo a mi script por lotes desde MSYS:
Y, la secuencia de comandos por lotes toma esos dos caminos, y convierte
/a\, utilizando la:OLD=NEWsintaxis de la expansión de parámetros para los reemplazos de cadenas. 11 Esto es similar a la
${PARAM:/OLD/NEW}sintaxis de bash , para aquellos familiarizados con ellafuente