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
[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
A voir également:
- Cd cygwin
- Cd burner - Télécharger - Gravure
- Hiren's boot cd - Télécharger - Divers Utilitaires
- Jaquette cd gratuite à télécharger - Télécharger - Catalogage
- Clone cd - Télécharger - Gravure
- Cd check - Télécharger - Récupération de données
2 réponses
Utilisateur anonyme
Modifié par shaynox le 6/07/2015 à 16:12
Modifié par shaynox le 6/07/2015 à 16:12
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
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
[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
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 :
tout est traité comme des arguments à :
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
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
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
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
[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
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.
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
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
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
Modifié par TheSola10 le 9/07/2015 à 22:41
Nan chuis sur que non
Mais merci pour les sublimes réponses :)
Mais merci pour les sublimes réponses :)
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
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...
La ligne BASH est devenue
Mais ce topic est fermé.
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 completedans le .BAT
Mais ce topic est fermé.
Modifié par TheSola10 le 8/07/2015 à 08:53