msys 쉘에서 내부 cmd 명령을 실행하는 방법은 무엇입니까?


19

Windows CMD유틸리티에는와 같은 많은 내부 명령이 있습니다 mklink. msys쉘 에서 어떻게 사용할 수 있습니까?

에서 CMD의 문서/c스위치는 명령 종료를 실행하는 데 사용할 수 있습니다; 그러나 이것은 작동하지 않는 것 같습니다.

  • 내가 cmd /c mklink하면 mklink명령이 실행 CMD되지 않고 쉘이 종료되지 않습니다.

Enter 키를 누르기 전에 :

여기에 이미지 설명을 입력하십시오

후:

여기에 이미지 설명을 입력하십시오

프로세스 모니터 스크린 샷 :

여기에 이미지 설명을 입력하십시오

  • 백그라운드 프로세스로 명령을 실행하려고합니다. cmd /c mklink &분명히 작동합니다. mklink명령이 실행되지만 CMD쉘은 종료되지 않습니다. Enter누를 때마다 CMD활성 쉘이됩니다.

cmd /c mklinkCygwin bash및을 사용 하여 C 쉘로 작동합니다 cmd.exe. 그러나 나는 높은 곳에서 달리거나 다른 방법으로 불만을 받았습니다. msys설치하지 않았기 때문에 시도 하지 않았지만 회의적입니다. 다른 일이 있다고 의심됩니다. 귀하가 한 일과 발생한 일에 대한 성적 증명서 또는 스크린 샷이 도움이 될 수 있습니다.
니콜 해밀턴

@NicoleHamilton, 스크린 샷이 추가되었습니다. 의 경우 mklink에 작업, 쉘은 참으로 관리자 권한으로 실행해야 않는다; 그러나 내 문제는 cmd쉘이 백그라운드에서 인계하거나 실행 하지 않고서는 내부 명령을 실행할 수 없다는 것 입니다. 이 문제는 관리자가 필요없는 간단한 명령 (예 :)에도 나타납니다 dir.
Mihai Rotaru

인터셉트 할 수있는 별명, 프로 시저 정의 또는 스크립트가 cmd있습니까?
Nicole Hamilton

@NicoleHamilton, 아뇨; @Maxiums의 조언을 받아 Process Monitor를 실행했으며 첨부 된 스크린 샷에서 볼 수 있듯이 문제는로 msys변환 /c됩니다 c:\ . 답은 이스케이프 처리하고 다음과 같이 명령을 실행하는 것 cmd //c mklink입니다.
Mihai Rotaru

답변:


14
  1. cmd.cmd 또는 cmd.bat에 대한 % PATH %를 검색하십시오. 그들은 당신의 cmd를 방해 할 수 있습니다

  2. 프로세스 모니터를 실행 하고을 실행하십시오 cmd /c mklink. 실제로 실행 된 명령에 대해서는 ProcMon 로그를 검사하십시오.


26
프로세스 모니터가 문제를 추적하는 데 도움이되었습니다. 그것은 즉 msys변환됩니다 /cc:\ ; 탈출해야합니다 : cmd //c mklink. 이러한 변환이 수행되는 방식이 여기 에 설명되어 있습니다 .
Mihai Rotaru

1
@MihaiRotaru이 코멘트는 답이 될 것입니다
laktak

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


1

프로세스 모니터가 문제를 추적하는 데 도움이되었습니다. 그것은 즉 msys변환됩니다 /cc:\; 탈출해야합니다 : cmd //c mklink. 이러한 변환이 수행되는 방식이 여기 에 설명되어 있습니다 . – Mihai Rotaru 1 월 1 일 13시 21 분 32 초

경로에 여전히 슬래시 가 포함되어 있고 유효한 스위치가 아니라고 불평 했기 때문에 Mihai의 의견 만으로이 작업을 수행 할 수 없었습니다 ./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}구문 과 유사 합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.