Tengo una aplicación construida con el compilador MinGW C++ que funciona algo así como grep - acommand ve algo como esto:englobamiento con MinGW en Windows
myapp -e '.*' *.txt
donde lo que viene después de la opción -e es una expresión regular , y la cosa después de eso es el patrón de nombre de archivo. Parece que MinGW expande automáticamente (globs en términos UNIX) la línea de comando para que mi expresión regular se destroce. Puedo desactivar este comportamiento, descubrí, estableciendo la variable global _CRT_glob
en cero. Esto estará bien para bash y otros usuarios de shell sensibles, ya que el shell expandirá el patrón de archivos. Para los usuarios de MS cmd.exe
, sin embargo, parece que tendré que expandir el patrón de archivo.
Así que mi pregunta: ¿Alguien sabe de una biblioteca globbing (o instalación en MinGW) para hacer parcial expansión de línea de comandos? Conozco la característica _setargv de Windows CRT, pero eso amplía la línea de comando completa. Tenga en cuenta que he visto this question, pero realmente no aborda la expansión parcial.
Terminé usando la compilación condicional para escribir mi propio código globbing para la versión de Windows de mi aplicación. Esto fue bastante fácil ya que tengo mi propia clase CommandLine que encapsula argc y argv de main(). Aún así, estaría interesado en escuchar otras soluciones.
Extraño, poner comillas alrededor de tu expresión regular debería evitar el comportamiento de globbing. –
@Brian Impide que el caparazón se incruste en el caparazón (por ejemplo, bash), pero bash quita las comillas y las pasa a mi aplicación, que luego realiza otra ronda de engomado. –
Supongo que no sigo entonces. Si su aplicación obtiene '. *' En argc/argv, ¿cuál es el problema? –