les fichiers batch ne sont-ils pas exécutables contrairement aux scripts shell?

J’utilise boost.process pour exécuter un processus externe avec une entrée donnée. l’utilisateur peut spécifier ce processus externe. Ainsi, la plupart du temps, l’utilisateur spécifie un script shell ou un script batch.

Je fais simplement boost::process::launch(_script, arguments, context); qui fonctionne à la fois les exécutables réels et les scripts shell tant qu’ils sont exécutables (+ x) comme prévu. mais quand je l’exécute dans Windows. Cela ne fonctionne pas Si je passe un fichier batch dans _script cela fonctionne si je spécifie un exécutable réel.

Cela me fait penser que dans Windows, les scripts par lots ne sont PAS des exécutables? Ils sont simplement interprétés via cmd.exe! Est-ce vrai ?

Je peux lancer cmd.exe et spécifier /c _script argv comme parameters de ligne de commande. mais cela ne sera pas une plateforme croisée.

et je ne veux pas faire d’appels system() parce que je n’aurai pas un contrôle total sur les processus créés?

C’est vrai, les fichiers de commandes ne sont pas directement exécutables et nécessitent un processeur de commandes pour les exécuter.

Cela dit, la résolution du problème de portabilité doit être assez simple et peut être effectuée soit à la compilation (via des macros de préprocesseur) soit au moment de l’exécution (variables d’environnement spécifiques à Windows? Extension du nom de fichier du script?)

J’irais probablement avec le premier comme plus robuste.