CD sous Cygwin

Fermé
TheSola10 - 3 juil. 2015 à 22:05
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 10 juil. 2015 à 00:39
Bonjour,

Actuellement, j'essaie de compiler un programme en C++ et Assembleur mais la commande CD que je lance à travers BASH ne fonctionne pas.

Voici un extrait de mon .BAT
cd c:\cygwin64\bin
bash -c DELTAOS=/cygdrive/c/Users/moi/Documents/Develop/Autres/Projet Delta OS && cd "$DELTAOS" && g++ DTK.cpp -o kernel.o -ffreestanding -fno-exceptions -fno-rtti && echo Kernel compilation complete


L'erreur retournée est une erreur Windows de chemin non trouvé, ce qui est étrange, car BASH lance des commandes Linux !


Pouvez-vous m'aider ?


PS: j'utilise la variable DELTAOS, sinon il me retourne une erreur (BASH cette fois) de chemin introuvable.

A voir également:

2 réponses

Salut,

Tu parles du premier ou second cd ?

Dans le second, tu tentes d'exécuter cd sur la même ligne que bash, enfin peut-être que je me trompe.

Quel est le cd qui ne fonctionne pas ?

Basic asm standard: reg(lowercase) instruction(lowercase) -> instruction ... dest, src
(\___/)
(='.'=)
(")_(")
This is Bunny. Copy and paste bunny into
your signature to help him gain world domina
0
Le premier accède à Cygwin sans problème. C'est le second qui plante. Je ne l'éxécute pas sur la même ligne que BASH, je l'éxécute DEPUIS Bash, d'où le -c
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 6/07/2015 à 18:57
Salut TheSola10,

Si le programme est sensé être compilé sous Cygwin, pourquoi le lancer à partir d'un .bat ?

Ouvre une session Cygwin et lance ta compilation à partir du terminal Cygwin.

Sinon, Bash avec -c exécute la chaîne qui suit en tant que commande, et que qui suit la chaîne est traité comme des arguments à la commande. Les arguments sont séparés par des espaces, donc

à partir de :
Delta OS && cd ...

tout est traité comme des arguments à :
DELTAOS=/cygdrive/c/Users/moi/Documents/Develop/Autres/Projet


http://www.gnu.org/software/bash/manual/bash.html#Invoking-Bash

... ce qui n'est vraiment pas ce que tu veux faire.

Tes problèmes avec ton approche peuvent venir du fait que ta "commande" Bash n'est pas une seule commande, mais de multiples commandes chaînées, et que l'ensemble n'est pas délimité par des guillemets. Si tu mets tout entre guillemets, tu devras gérer l'échappement des guillemets inclus.

Si tu tiens à lancer directement depuis Windows, tu pourrais décomplexifier ta commande passée via -c en créant un script bash dans Cygwin comprenant les commandes à lancer et en passant à -c uniquement le chemin vers ce script.

Comme discuté ici : https://sourceware.org/legacy-ml/cygwin/2004-07/msg00163.html

Dal
0
C'est le but: Le bat inclut aussi GCC Linker et ASM Compiler, et bientôt grub-mkrescue pour créer un ISO bootable, mais c'est la ligne que j'ai citée qui pose problème. Et puis ça m'est plus simple car je le lance depuis Visual Studio.
Pour BASH, non car CD est exécuté comme commande à part entière, et la variable DELTAOS inclut aussi les espaces. J'ai testé. Les guillemets autour de DELTAOS dans CD servent à "ignorer" les espaces. Les variables BASH agissent comme un préprocesseur C++ (remplacement de texte)

Sinon je vais essayer avec un script *.sh
0
  • râââh* pourquoi MSVCC compile que des .exe? POURQUOI?
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
Modifié par [Dal] le 8/07/2015 à 14:49
Salut,

DELTAOS n'est pas une "variable BASH", c'est une variable d'environnement.

Comme je te l'ai dit, ce qui suit -c doit être entre guillemets s'il y a des espaces (l'ensemble), autrement ce qui suit est considéré comme des arguments à ce qui est passé jusqu'au premier espace. Par ailleurs, tu dois aussi gérer les espaces dans le répertoire passé à la variable d'environnement, sinon tu auras le même problème, puis de nouveau gérer les espaces lorsque tu passes la variable à cd en mettant des guillemets autour qu'il te faudra échapper aussi vu qu'ils sont dans les guillemets du -c.

bash -c "export DELTAOS=/cygdrive/c/Users/moi/Documents/Develop/Autres/Projet\ Delta\ OS && cd \"$DELTAOS\" && g++ DTK.cpp -o kernel.o -ffreestanding -fno-exceptions -fno-rtti && echo Kernel compilation complete"

devrait d'avantage ressembler à quelque chose de cohérent. Il faut aussi utiliser export pour t'assurer que la variable d'environnement persiste pendant toute la durée du shell lancé.

Tu gagnerais en simplicité en veillant à ce que les noms de répertoires et fichiers ne comportent pas d'espaces.

Dal
0
TheSola10 > [Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024
Modifié par TheSola10 le 9/07/2015 à 22:41
Nan chuis sur que non

Mais merci pour les sublimes réponses :)
0
TheSola10 > [Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024
Modifié par TheSola10 le 9/07/2015 à 22:55
Ou je suis une quille car je CD alors que BASH est peut-être déjà dans le chemin voulu!

Quand j'ai enlevé CD,, tout est rentré dans l'ordre, sauf...
g++ : fatal error : no input files


La ligne BASH est devenue
c:\cygwin64\bin\bash -c /cygdrive/c/cygwin64/bin/g++ DTK.cpp -o kernel.o -ffreestanding -fno-exceptions -fno-rtti && echo Kernel compilation complete 
dans le .BAT

Mais ce topic est fermé.
0