Exécution de cmd.exe à partir de Cygwin

16

Je voudrais utiliser Cygwin pour mon shell principal au travail, mais mon groupe utilise des fichiers batch pour plusieurs processus. On m'a dit que je pouvais juste faire cmd /c batch.batpour exécuter le fichier de commandes à partir de Cygwin. Cela fonctionne pour certains cas et pas pour d'autres. L'un des fichiers de commandes échoue complètement lorsque je le fais, mais fonctionne correctement lorsque je l'exécute à partir du shell cmd.

Une autre bizarrerie que j'ai remarquée est que si je cours cmd /?depuis Cygwin, je n'obtiens aucune sortie. L'exécution à partir du shell cmd donne l'aide standard. Même faire cmd /c cmd /?ne fournit aucune sortie. Si cmdj'exécute à partir de Cygwin, cela me donne le shell cmd, puis si j'exécute cmd /?, j'obtiens le texte d'aide, mais sans les sauts de page.

Je suppose que la prochaine chose à essayer est de trouver un moyen de lancer réellement cmd dans sa propre fenêtre distincte, comme si vous étiez allé à Démarrer-> Exécuter, puis tapé "cmd". Existe-t-il un moyen de le faire depuis Cygwin?

Ryan Fox
la source

Réponses:

8

/?est traité comme un modèle par bash, où le point d'interrogation s'adaptera à un seul caractère, donc si vous avez des fichiers ou répertoires à une lettre dans votre racine Cygwin, le modèle sera remplacé par ceux-ci. echo /?vous montrera si c'est ce qui se passe. Vous pouvez échapper à la marque question avec une barre oblique inverse: /\?. Ou citer tout l'argument: '/?'.

cygstart c:/windows/system32/cmd démarrera cmd.exe dans sa propre fenêtre.

ak2
la source
sur mon latop win xp sp2, cet extrait de code suivant fonctionnerait: cygstart / cygdrive / c / WINDOWS / system32 / cmd
Michael Mao
14

Vous pouvez exécuter un fichier batch directement depuis un shell Cygwin, vous n'avez même pas besoin de l'appel intermédiaire à cmd. Si le fichier de commandes nécessite des arguments, ils doivent être cités à la manière de Windows; il pourrait être plus simple à exécuter cmd /c 'foo.bat "quoted arguments"'.

Vous ne dites pas dans quel terminal vous exécutez le shell. Les fichiers batch en eux-mêmes ne se soucient pas de cela, mais les commandes qui sont exécutées à partir des fichiers batch peuvent l'être. Les émulateurs de terminaux Cygwin n'émulent pas les consoles Windows, ils conviennent donc aux programmes Cygwin et aux programmes stdio uniquement, mais pas aux programmes de console Windows.

Si vous exécutez normalement des shells Cygwin dans un terminal Cygwin (tel que rxvt ou mintty), vous pouvez exécuter les fichiers batch de problèmes dans une console Windows distincte avec start foo.bat. Vous souhaiterez peut-être exécuter Console2 comme meilleur remplacement de la console Windows et exécuter les applications de console Windows dans les applications Console2 et Cygwin dans un terminal Cygwin (ou même dans Console2).

cmd /?est un hareng rouge: il y a probablement des répertoires d'un caractère dans le répertoire racine de Cygwin, donc le shell se développe /?et s'exécute cmdavec des commutateurs qui ne produisent aucune sortie.

Gilles 'SO- arrête d'être méchant'
la source
J'avais besoin de coller des variables de shell dans les arguments cmd, j'ai donc pensé que les éléments suivants pourraient fonctionner autour des analyseurs Bash et cmd: u = 'DOMAIN \ ACC' p = 'X <12' r = '{Baz 3.1 5-x - (TTT )} 'd = $' \ "'cmd / c foo.bat -u% d %% u %% d% -p% d %% p %% d% -fooBar% d %% r %% d% - fooBAR true
anguille ghEEz