La CMD
utilidad de Windows tiene una serie de comandos internos, como mklink
. ¿Cómo se pueden usar desde la msys
cáscara?
De CMD
la documentación de , el /c
interruptor se puede utilizar para ejecutar un comando y salir; Pero esto no parece funcionar.
- Si lo hago,
cmd /c mklink
elmklink
comando no se ejecuta yCMD
no 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: elmklink
comando se ejecuta, pero elCMD
shell no finaliza. Cada vez queEnter
se presiona,CMD
se convertirá en el shell activo.
command-line
msysgit
msys
Mihai Rotaru
fuente
fuente
cmd /c mklink
funciona para mí con mi shell C, con Cygwinbash
y 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 intentadomsys
porque 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ó.mklink
que funcione, el shell realmente debe ejecutarse como administrador; pero mi problema es que no puedo ejecutar ninguno de los comandos internos sin que elcmd
shell 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
?msys
los convertidos/c
ac:\
. 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
msys
va a convertir/c
ac:\
; 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 semklink
quejó de que/msys64
no 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=NEW
sintaxis 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