L' CMD
utilitaire Windows possède un certain nombre de commandes internes, telles que mklink
. Comment peuvent-ils être utilisés depuis la msys
coque?
D'après CMD
la documentation de , le /c
commutateur peut être utilisé pour exécuter une commande et quitter; mais cela ne semble pas fonctionner.
- Si je fais,
cmd /c mklink
lamklink
commande n'est pas exécutée et leCMD
shell n'est pas quitté.
Avant d'appuyer sur Entrée:
Après:
Capture d'écran de Process Monitor:
- Essayer d'exécuter la commande en arrière-plan:
cmd /c mklink &
fonctionne apparemment - lamklink
commande est exécutée, mais leCMD
shell n'est pas terminé. Chaque fois que vousEnter
appuyez sur,CMD
devient le shell actif.
command-line
msysgit
msys
Mihai Rotaru
la source
la source
cmd /c mklink
fonctionne pour moi avec mon shell C, avec Cygwinbash
et aveccmd.exe
. Mais je devais être en cours d'exécution élevée ou bien j'ai reçu des plaintes, "Vous n'avez pas le privilège suffisant pour effectuer cette opération." Je n'ai pas essayémsys
car je ne l'ai pas installé mais je suis sceptique que c'est le problème. Je soupçonne qu'il se passe autre chose. Une transcription ou une capture d'écran de ce que vous avez fait et de ce qui s'est passé pourrait être utile.mklink
fonctionner, le shell doit en effet être exécuté en tant qu'administrateur; mais mon problème est que je ne peux exécuter aucune des commandes internes sans que lecmd
shell prenne le relais ou s'exécute en arrière-plan. Ce problème est également présent pour les commandes plus simples qui ne nécessitent pas d'administration, telles quedir
.cmd
?msys
transforme/c
enc:\
. La réponse est de l'échapper et d'exécuter la commande en tant quecmd //c mklink
.Réponses:
Recherchez dans% PATH% cmd.cmd ou cmd.bat. Ils peuvent interférer avec votre cmd
Exécutez Process Monitor et exécutez votre
cmd /c mklink
. Examinez le journal ProcMon pour les commandes réellement exécutées.la source
msys
se convertira/c
enc:\
; il doit être échappé:cmd //c mklink
. La façon dont ces conversions sont effectuées est expliquée ici .win7 / cygwin / bash a eu le même problème, la solution consiste à lancer deux fois cmd et à convertir les barres obliques en barres obliques inverses selon les besoins de cmd (par exemple):
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
la source
Je ne pouvais pas faire fonctionner cela sur la base du seul commentaire de Mihai , car le chemin contenait toujours des barres obliques
/
, et semklink
plaignait que ce/msys64
n'était pas un commutateur valide.J'ai donc écrit un script batch pour le faire fonctionner.
Voici comment j'appelle mon script de commandes à partir de MSYS:
Et, le script de commandes prend ces deux chemins et se convertit
/
en\
utilisant la:OLD=NEW
syntaxe d'expansion des paramètres pour les remplacements de chaînes. 11 Ceci est similaire à la
${PARAM:/OLD/NEW}
syntaxe de bash , pour ceux qui la connaissentla source