Narzędzie Windows CMD
ma wiele wewnętrznych poleceń, takich jak mklink
. Jak można ich używać z msys
powłoki?
Z CMD
„s dokumentacji The /c
przełącznik może być użyty do wykonania polecenia i wyjście; ale to nie działa.
- Jeśli robię polecenie nie zostanie wykonane, a powłoka nie jest zakończony.
cmd /c mklink
mklink
CMD
Przed naciśnięciem Enter:
Po:
Zrzut ekranu Monitora procesu:
- Próba uruchomienia polecenia jako procesu w tle:
cmd /c mklink &
najwyraźniej działa -mklink
polecenie jest wykonywane, aleCMD
powłoka nie jest zakończona. Po każdymEnter
naciśnięciuCMD
stanie się aktywną powłoką.
command-line
msysgit
msys
Mihai Rotaru
źródło
źródło
cmd /c mklink
działa dla mnie z moją powłoką C, z Cygwinbash
icmd.exe
. Ale musiałem biegać na podwyższeniu, bo w przeciwnym razie dostałem skargi: „Nie masz wystarczających uprawnień, aby wykonać tę operację”. Nie próbowałem,msys
ponieważ nie mam go zainstalowanego, ale jestem sceptyczny, to jest problem. Podejrzewam, że dzieje się coś jeszcze. Pomocny może być zapis lub zrzut ekranu z tego, co zrobiłeś i co się stało.mklink
działać, powłoka musi być uruchomiona jako administrator; ale moim problemem jest to, że nie mogę uruchomić żadnego z wewnętrznych poleceń bezcmd
przejęcia przez powłokę lub uruchomienia w tle. Ten problem występuje również w przypadku prostszych poleceń, które nie wymagają administratora, takich jakdir
.cmd
?msys
konwertuje się/c
nac:\
. Odpowiedzią jest ucieczka i uruchomienie polecenia jakocmd //c mklink
.Odpowiedzi:
Wyszukaj% PATH% w poszukiwaniu cmd.cmd lub cmd.bat. Mogą zakłócać twoje cmd
Uruchom Monitor procesu i uruchom swój
cmd /c mklink
. Sprawdź dziennik ProcMon pod kątem naprawdę wykonanych poleceń.źródło
msys
przekształci/c
sięc:\
; to musi być uciekł:cmd //c mklink
. Sposób konwersji jest wyjaśniony tutaj .win7 / cygwin / bash miał ten sam problem, rozwiązaniem jest dwukrotne uruchomienie cmd i konwersja ukośników na odwrotne ukośniki zgodnie z potrzebami cmd (na przykład):
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
źródło
Nie mogłem tego uruchomić na podstawie samego komentarza Mihai , ponieważ ścieżka nadal zawierała ukośniki do przodu
/
imklink
narzekała, że/msys64
nie był to prawidłowy przełącznik.Więc napisałem skrypt wsadowy, aby działał.
Oto jak nazywam mój skrypt wsadowy z MSYS:
I skrypt wsadowy pobiera te dwie ścieżki i konwertuje
/
je\
, używając:OLD=NEW
składni rozszerzania parametrów do zamiany łańcucha. 11 Jest to podobne do
${PARAM:/OLD/NEW}
składni basha dla tych, którzy go znająźródło