Windows CMD
유틸리티에는 다음과 같은 여러 내부 명령이 있습니다 mklink
. 쉘 에서 어떻게 사용할 수 있습니까 msys
?
에서CMD
님의 문서, /c
스위치를 사용하여 명령을 실행하고 종료할 수 있습니다. 하지만 이것은 작동하지 않는 것 같습니다.
- 그렇게 하면
cmd /c mklink
명령mklink
이 실행되지 않고CMD
쉘이 종료되지 않습니다.
Enter를 누르기 전:
후에:
프로세스 모니터 스크린샷:
- 명령을 백그라운드 프로세스로 실행하려고 합니다.
cmd /c mklink &
분명히 작동합니다.mklink
명령은 실행되지만CMD
쉘은 종료되지 않습니다.Enter
누를 때마다CMD
활성 쉘이 됩니다.
답변1
%PATH%에서 cmd.cmd 또는 cmd.bat를 검색하세요. cmd를 방해할 수 있습니다.
달리다프로세스 모니터그리고
cmd /c mklink
. 실제로 실행된 명령에 대한 ProcMon 로그를 검사합니다.
답변2
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
답변3
프로세스 모니터는 문제를 추적하는 데 도움이 되었습니다. 로
msys
변환되는 것입니다 . 이스케이프되어야 합니다: . 이러한 변환이 수행되는 방식이 설명됩니다./c
c:\
cmd //c mklink
여기. – 미하이 로타루13-01-01 21:32
나는 이것을 기반으로 작동시키지 못했습니다.미하이의 코멘트경로 /
에 여전히 슬래시가 포함되어 있고 유효한 스위치가 아니라고 mklink
불평했기 때문입니다./msys64
그래서 작동하도록 배치 스크립트를 작성했습니다.
MSYS에서 배치 스크립트를 호출하는 방법은 다음과 같습니다.
$ mingw_ln.bat "$destination" "$targetpath"
그리고 배치 스크립트는 문자열 대체를 위한 매개변수 확장 구문을 사용하여 이 두 경로를 사용하고 /
로 변환합니다. 1\
:OLD=NEW
set LINK=%1
set TARGET=%2
REM Convert POSIX paths to Windows paths
set LINK=%LINK:/=\%
set TARGET=%TARGET:/=\%
mklink /D %LINK% %TARGET%
1 이것은 bash의 ${PARAM:/OLD/NEW}
구문과 유사합니다.
답변4
Mihai Rotaru의 의견을 확장하면 다음과 같습니다.
프로세스 모니터는 문제를 추적하는 데 도움이 되었습니다. 로
msys
변환되는 것입니다 . 이스케이프되어야 합니다: . 이러한 변환이 수행되는 방식이 설명됩니다./c
c:\
cmd //c mklink
여기. – 미하이 로타루13-01-01 21:32
환경 변수를 사용하면 일부 또는 모든 인수에 대해 이러한 변환 /c
을 c:\
피할 수도 있습니다 MSYS2_ARG_CONV_EXCL
.
예:
$ MSYS2_ARG_CONV_EXCL='*' /c/Windows/System32/cmd.exe /C "echo foo"
(그 이후로 조심하세요. '*'
그리고 "*"
다른 의미를 갖게 될 것입니다.)
인용하면MSYS2 문서:
MSYS2_ARG_CONV_EXCL
모든 것을 제외한다는 의미 일 수도 있고 [...] 와 같이*
로 구분된 하나 이상의 인수 접두사 목록일 수도 있습니다.;
MSYS2_ARG_CONV_EXCL=--dir=;--bla=;/test