Resumen de actualización
Los ejecutables en cuestión no son formato nativo de Linux (ELF), están compilados para Windows. Durante la expansión de ruta, bash verifica el número mágico del binario, si no coincide con ELF, no lo expone a través de la expansión de ruta. Sin embargo, bash para Windows incluía la capacidad de iniciar aplicaciones nativas de Windows desde el entorno de bash, por lo que la ejecución directa (sin expansión de ruta y posterior comprobación binaria) funciona bien.
La resolución es una adición de .bashrc basada en alias (o cualquier número de métodos alternativos para imitar la expansión de ruta evitando la evaluación de archivos bash) o la instalación de la versión de Linux.
Respuesta original
Permisos de archivo
Es posiblemente un problema de permisos del sistema de archivos cruzados. Si usted cd /mnt/c/Program\ Files/apache-maven-3.3.9/bin
y trata de ejecutar mvn como, ./mvn
¿qué pasa?
¿Cuál es la salida de ls -alt
ese directorio?
Si el archivo no está marcado correctamente como ejecutable, no aparecerá como un "programa" en su ruta. Si se trata de un archivo binario y no está en formato 'linux' (ELF), tampoco aparecerá como una ruta ejecutable.
Si la ejecución directa de mvn no funciona (publique los resultados de ls), intente agregar permisos de ejecución chmod ug+x mvn
Versión incorrecta instalada
¿Está seguro de que tiene instalada la versión nativa de Linux? La misma versión que usó con cygwin definitivamente no funcionará.
Puede verificar la compatibilidad binaria con
sudo apt-get install elf-binutils
el archivo y luego usar el comando
readelf -a mvn
Si obtiene un error como 'No es un archivo ELF ...', entonces tiene su respuesta.
Me acabo de dar cuenta de que no agregaste permisos de ejecución al script de shell de prueba en tu ejemplo, el cual (a menos que simplemente hayas olvidado enumerar el paso), explica completamente esa falla en particular.
Resumen:
- Asegúrese de que los ejecutables en el directorio bin de maven estén configurados correctamente como ejecutables utilizando chmod. Publique la salida de ls -alt en su respuesta.
- Asegúrese de tener un binario de Linux: use el utilty readelf para verificar.
- Ejecute su prueba de script de shell nuevamente, pero esta vez marque el archivo como ejecutable.
Actualizar
El tema del camino era un arenque rojo; solo está intentando ejecutar un formato binario que no es compatible con el entorno de Linux en Windows.
En la superficie, los dos entornos (cygwin y bash en Windows) proporcionan una experiencia de usuario algo similar, pero la implementación y la compatibilidad binaria resultante son muy diferentes.
En pocas palabras: los formatos binarios de Cygwin y Linux no son compatibles. Debe instalar la versión nativa de Linux para ejecutarla desde bash en Windows. También puede compilarlo desde la fuente dentro del entorno bash en Windows; pero debido a la naturaleza del entorno de los primeros días, me preocuparía perseguir dependencias.
Breve descripción de los dos entornos:
Cygwin es efectivamente una capa de traducción que proporciona una API para llamadas al sistema que normalmente no están disponibles en sistemas que no son POSIX, lo que le permite compilar muchos programas escritos para ejecutarse en Linux en el entorno de Windows. Sin embargo, todavía se está ejecutando en un entorno 'windows': ese binario ahora solo funcionará en el entorno cygwin en windows. Esta capa de traducción y las bibliotecas asociadas permiten compilar el código fuente escrito en la API de Linux en el entorno cygwin y ejecutarlo en Windows. Los binarios creados de esta manera no se ejecutarán en Linux o Windows de forma nativa; solo en el entorno cygwin.
El entorno bash en ventanas proporcionado por canonical es muy diferente al de cygwin. Realmente 'recrea' un entorno para un programa que parece ser realmente Linux, es decir, las bibliotecas estándar están disponibles junto con las llamadas al sistema POSIX, sin requerir ninguna modificación en los archivos binarios. En muchos casos, un binario construido contra ubuntu se puede copiar directamente al entorno bash en Windows y ejecutarse sin problemas.
Para ser reconocido como un ejecutable válido en bash en Windows, debe estar en un formato binario nativo de Linux o un archivo de script marcado con el programa para interpretarlo (para un script de bash, #! / Bin / bash). Se habrá creado un binario nativo de Linux contra bibliotecas de Linux y llamadas al sistema. Bash confirma que algo es un ejecutable válido tanto al verificar los bits de permiso ejecutables como al verificar que el formato del archivo binario es compatible (una verificación de 'número mágico'). Si es un archivo binario y no está en formato ELF, no está expuesto al shell a través de la expansión de ruta.
Para hacer que este problema sea más difícil de aclarar, han agregado la capacidad parcial de iniciar aplicaciones nativas de Windows desde bash en Windows, pero claramente no abordaron la verificación del formato de archivo binario de expansión de ruta bash, o lo hicieron y es un error.
Segunda edición:
Aclaración sobre su pregunta:
Cuando lo ejecutas directamente (./mvn), pasa por alto la evaluación Bash y simplemente lo ejecuta. El entorno bash en Windows es lo suficientemente inteligente como para ejecutar ejecutables nativos de Windows, lo cual debe ser. No creo que un binario cygwin se ejecute correctamente desde bash, pero podría ser incorrecto: la documentación es escasa en este momento y no tengo un entorno de prueba accesible en este momento.
Solución alternativa que proporciona una capacidad equivalente al soporte de 'ruta':
Si de lo contrario está completamente satisfecho con la instalación de Maven (no hay otros problemas de compatibilidad, todo simplemente 'funciona'), pero tenerlo en el camino es importante, puede utilizar una solución simple que proporcionará una capacidad equivalente.
En su archivo .bashrc, agregue el siguiente alias:
alias mvn='/mnt/c/Program\ Files/apache-maven-3.3.9/bin/mvn'
Repita el equivalente para cualquier otro ejecutable en ese directorio al que desea acceder desde cualquier lugar dentro del entorno bash en Windows.
reinicie bash u obtenga el archivo, y luego mvn
funcionará desde cualquier directorio (según su declaración de que la ejecución directa desde el directorio bin, ./mvn, estaba funcionando).
C:\Users\%username%\AppData\Local\lxss\root\.bashrc
archivo por ahora para agregar ruta?