J'ai un petit souci dans un Makefile.
Je souhaite faire une commande pour faire une version
de mon projet sous forme de tar.
Voici ce que j'ai déjà fait:
tar: cleanall
tar cfj simu.`date +%d-%m-%y.%H-%M`.tar.bz2 *
He oui, c'est un projet de simulation ;)
Le problème avec ceci, c'est que lors de la décompression
de l'archive, tous les fichiers et répertoires du projets
sont extraits directement dans le répertoire courant.
J'aimerais donc compresser tout dans un répertoire avec une
commande du type:
tar cfj foo.tar.bz2 rep/
Pour avoir le répertoire courant, j'ai pensé faire:
pwd | sed s/^\\/.*\\///
Stocké dans une variable du Makefile ca donne:
REP = `pwd | sed s/^\\\\/.*\\\\///`
L'idée serait donc de faire:
cd ..
tar cfj simu.`date +%d-%m-%y.%H-%M`.tar.bz2 $(REP)
cd $(REP)
Mais le problème avec ça, c'est le 'cd ..' car le $(REP)
donne le repertoire précédent du projet (..) et non le
répertoire courant.
L'idée serait donc de faire: cd .. tar cfj simu.`date +%d-%m-%y.%H-%M`.tar.bz2 $(REP) cd $(REP)
Les lignes des Makefile sont souvent (pas toujours...) interpretees separement. Mettre des ; a la fin pour n'en faire qu'une grande ligne logique.
mettre des && plutôt quand on veut que ça s'arrete quand ça se passe mal.
Nicolas
Laurent Wacrenier wrote:
Jean-Marc Bourguet écrit:
L'idée serait donc de faire: cd .. tar cfj simu.`date +%d-%m-%y.%H-%M`.tar.bz2 $(REP) cd $(REP)
Les lignes des Makefile sont souvent (pas toujours...) interpretees separement. Mettre des ; a la fin pour n'en faire qu'une grande ligne logique.
mettre des && plutôt quand on veut que ça s'arrete quand ça se passe mal.
Exacte, c'etait une erreur de ma part lors de la copie (j'obterais pour ma part plutôt pour &&...). Mais le problème ne vient pas de là!
Je me suis mal exprimé, essayons de faire mieux! Le problème est que je voudrais faire un tar de mon dossier de projet avec make mais que je voudrais tarrer le dossier entier et non son contenu.
Par exemple, vous avez le répertoire de projet /home/toto/projet. Pour le tarrer, on se placera dans /home/toto et on fera: tar cvfj simu.`date +%d-%m-%y.%H-%M`.tar.bz2 projet/
Il faut donc récupérer le nom du répertoire du projet (projet) (avec `pwd | sed s/^\/.*\///`) et le tarrer. Sauf que, ça ne fonctionne pas car on fait un cd.. avant et avec la commande `pwd | sed s/^\/.*\///`, on obtient non pas 'projet' mais toto!
Si quelqu'un a une idée pour stocker le resultat evalué de la commande sed et non la commande pour pouvoir l'utiliser ensuite...
Merci dans une variable
Laurent Wacrenier wrote:
Jean-Marc Bourguet <jm@bourguet.org> écrit:
L'idée serait donc de faire:
cd ..
tar cfj simu.`date +%d-%m-%y.%H-%M`.tar.bz2 $(REP)
cd $(REP)
Les lignes des Makefile sont souvent (pas toujours...) interpretees
separement. Mettre des ; a la fin pour n'en faire qu'une grande
ligne logique.
mettre des && plutôt quand on veut que ça s'arrete quand ça se passe mal.
Exacte, c'etait une erreur de ma part lors de la copie (j'obterais pour
ma part plutôt pour &&...). Mais le problème ne vient pas de là!
Je me suis mal exprimé, essayons de faire mieux!
Le problème est que je voudrais faire un tar de mon dossier de projet
avec make mais que je voudrais tarrer le dossier entier et non son
contenu.
Par exemple, vous avez le répertoire de projet /home/toto/projet.
Pour le tarrer, on se placera dans /home/toto et on fera:
tar cvfj simu.`date +%d-%m-%y.%H-%M`.tar.bz2 projet/
Il faut donc récupérer le nom du répertoire du projet (projet)
(avec `pwd | sed s/^\\/.*\\///`) et le tarrer.
Sauf que, ça ne fonctionne pas car on fait un cd.. avant et avec la
commande `pwd | sed s/^\\/.*\\///`, on obtient non pas 'projet' mais
toto!
Si quelqu'un a une idée pour stocker le resultat evalué de la commande
sed et non la commande pour pouvoir l'utiliser ensuite...
L'idée serait donc de faire: cd .. tar cfj simu.`date +%d-%m-%y.%H-%M`.tar.bz2 $(REP) cd $(REP)
Les lignes des Makefile sont souvent (pas toujours...) interpretees separement. Mettre des ; a la fin pour n'en faire qu'une grande ligne logique.
mettre des && plutôt quand on veut que ça s'arrete quand ça se passe mal.
Exacte, c'etait une erreur de ma part lors de la copie (j'obterais pour ma part plutôt pour &&...). Mais le problème ne vient pas de là!
Je me suis mal exprimé, essayons de faire mieux! Le problème est que je voudrais faire un tar de mon dossier de projet avec make mais que je voudrais tarrer le dossier entier et non son contenu.
Par exemple, vous avez le répertoire de projet /home/toto/projet. Pour le tarrer, on se placera dans /home/toto et on fera: tar cvfj simu.`date +%d-%m-%y.%H-%M`.tar.bz2 projet/
Il faut donc récupérer le nom du répertoire du projet (projet) (avec `pwd | sed s/^\/.*\///`) et le tarrer. Sauf que, ça ne fonctionne pas car on fait un cd.. avant et avec la commande `pwd | sed s/^\/.*\///`, on obtient non pas 'projet' mais toto!
Si quelqu'un a une idée pour stocker le resultat evalué de la commande sed et non la commande pour pouvoir l'utiliser ensuite...
Merci dans une variable
Jean-Marc Bourguet
Nicolas writes:
Si quelqu'un a une idée pour stocker le resultat evalué de la commande sed et non la commande pour pouvoir l'utiliser ensuite...
rep=$(basename $(pwd)) && cd .. && tar cf foo.tar "$rep"
A+
-- Jean-Marc Site de usenet-fr: http://www.usenet-fr.news.eu.org
Nicolas <jac_dot_otin_@_freesbee_dot_fr> writes:
Si quelqu'un a une idée pour stocker le resultat evalué de la commande sed
et non la commande pour pouvoir l'utiliser ensuite...
rep=$(basename $(pwd)) && cd .. && tar cf foo.tar "$rep"
A+
--
Jean-Marc
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Si quelqu'un a une idée pour stocker le resultat evalué de la commande sed et non la commande pour pouvoir l'utiliser ensuite...
rep=$(basename $(pwd)) && cd .. && tar cf foo.tar "$rep"
A+
Merci beaucoup! Ca n'a pas marché du premier coup mais en arrangeant un peu, tout roule! Voici le code final, si ça peut servir:
REP=`basename $$PWD`; cd .. ; tar cfj simu.$(NOM_TAR_VERSION).tar.bz2 $$REP && cd $$REP
@+ Nicolas
Jean-Marc Bourguet
Nicolas writes:
Jean-Marc Bourguet wrote:
Nicolas writes:
Si quelqu'un a une idée pour stocker le resultat evalué de la commande sed et non la commande pour pouvoir l'utiliser ensuite... rep=$(basename $(pwd)) && cd .. && tar cf foo.tar "$rep"
A+
Merci beaucoup! Ca n'a pas marché du premier coup mais en arrangeant un peu, tout roule! Voici le code final, si ça peut servir:
REP=`basename $$PWD`; cd .. ; tar cfj simu.$(NOM_TAR_VERSION).tar.bz2 $$REP && cd $$REP
Le cd final est inutile, make lance des sous-process et un sous-process est incapable de changer quoi que ce soit a l'environnement du parent.
A+
-- Jean-Marc Site de usenet-fr: http://www.usenet-fr.news.eu.org
Nicolas <jac_dot_otin_@_freesbee_dot_fr> writes:
Jean-Marc Bourguet wrote:
Nicolas <jac_dot_otin_@_freesbee_dot_fr> writes:
Si quelqu'un a une idée pour stocker le resultat evalué de la commande sed
et non la commande pour pouvoir l'utiliser ensuite...
rep=$(basename $(pwd)) && cd .. && tar cf foo.tar "$rep"
A+
Merci beaucoup!
Ca n'a pas marché du premier coup mais en arrangeant un peu, tout roule!
Voici le code final, si ça peut servir:
REP=`basename $$PWD`; cd .. ;
tar cfj simu.$(NOM_TAR_VERSION).tar.bz2 $$REP &&
cd $$REP
Le cd final est inutile, make lance des sous-process et un
sous-process est incapable de changer quoi que ce soit a
l'environnement du parent.
A+
--
Jean-Marc
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Si quelqu'un a une idée pour stocker le resultat evalué de la commande sed et non la commande pour pouvoir l'utiliser ensuite... rep=$(basename $(pwd)) && cd .. && tar cf foo.tar "$rep"
A+
Merci beaucoup! Ca n'a pas marché du premier coup mais en arrangeant un peu, tout roule! Voici le code final, si ça peut servir:
REP=`basename $$PWD`; cd .. ; tar cfj simu.$(NOM_TAR_VERSION).tar.bz2 $$REP && cd $$REP
Le cd final est inutile, make lance des sous-process et un sous-process est incapable de changer quoi que ce soit a l'environnement du parent.
A+
-- Jean-Marc Site de usenet-fr: http://www.usenet-fr.news.eu.org
Stephane Chazelas
2005-01-6, 10:47(+00), NICOLAS MAUPU:
J'ai un petit souci dans un Makefile. Je souhaite faire une commande pour faire une version de mon projet sous forme de tar. Voici ce que j'ai déjà fait:
tar: cleanall tar cfj simu.`date +%d-%m-%y.%H-%M`.tar.bz2 *
He oui, c'est un projet de simulation ;) Le problème avec ceci, c'est que lors de la décompression de l'archive, tous les fichiers et répertoires du projets sont extraits directement dans le répertoire courant. J'aimerais donc compresser tout dans un répertoire avec une commande du type: tar cfj foo.tar.bz2 rep/
Pour avoir le répertoire courant, j'ai pensé faire: pwd | sed s/^/.*/// Stocké dans une variable du Makefile ca donne: REP = `pwd | sed s/^\/.*\///`
L'idée serait donc de faire: cd .. tar cfj simu.`date +%d-%m-%y.%H-%M`.tar.bz2 $(REP) cd $(REP) [...]
Note que "cd" fait par defaut un "cd -L", mais c'est pour rendre plus clair le fait qu'on ne veut pas faire un chdir(".."), mais un chdir(dirname(current-shell-wd)). Cette version prend en compte le cas ou $(pwd -L) peut etre un lien symbolique (valable pour les shells qui utilisent $PWD et qui ne sont pas POSIX conformants sur ce point [ce qui est le cas de la plupart des shells pretendument conformants]).
J'utilise pax plutot que tar parce qu'elle est standardisee par SUSv3 au contraire de tar, mais c'est histoire de gout.
SUSv3> PWD SUSv3> Set by the shell to be an absolute pathname of the SUSv3> current working directory, containing no SUSv3> components of type symbolic link, no components SUSv3> that are dot, and no components that are dot-dot SUSv3> when the shell is initialized. If an application SUSv3> sets or unsets the value of PWD , the behaviors of SUSv3> the cd and pwd utilities are unspecified.
mais bash, pdksh, zsh, dash, ksh93 gardent tous les liens symboliques dans $PWD si cette variable se trouve dans leur environnement au demarrage (ce qui permet de propager le "current-shell-wd" d'un shell a l'autre).
-- Stephane
2005-01-6, 10:47(+00), NICOLAS MAUPU:
J'ai un petit souci dans un Makefile.
Je souhaite faire une commande pour faire une version
de mon projet sous forme de tar.
Voici ce que j'ai déjà fait:
tar: cleanall
tar cfj simu.`date +%d-%m-%y.%H-%M`.tar.bz2 *
He oui, c'est un projet de simulation ;)
Le problème avec ceci, c'est que lors de la décompression
de l'archive, tous les fichiers et répertoires du projets
sont extraits directement dans le répertoire courant.
J'aimerais donc compresser tout dans un répertoire avec une
commande du type:
tar cfj foo.tar.bz2 rep/
Pour avoir le répertoire courant, j'ai pensé faire:
pwd | sed s/^\/.*\///
Stocké dans une variable du Makefile ca donne:
REP = `pwd | sed s/^\\/.*\\///`
L'idée serait donc de faire:
cd ..
tar cfj simu.`date +%d-%m-%y.%H-%M`.tar.bz2 $(REP)
cd $(REP)
[...]
Note que "cd" fait par defaut un "cd -L", mais c'est pour rendre
plus clair le fait qu'on ne veut pas faire un chdir(".."), mais
un chdir(dirname(current-shell-wd)). Cette version prend en
compte le cas ou $(pwd -L) peut etre un lien symbolique (valable
pour les shells qui utilisent $PWD et qui ne sont pas POSIX
conformants sur ce point [ce qui est le cas de la plupart des
shells pretendument conformants]).
J'utilise pax plutot que tar parce qu'elle est standardisee par
SUSv3 au contraire de tar, mais c'est histoire de gout.
SUSv3> PWD
SUSv3> Set by the shell to be an absolute pathname of the
SUSv3> current working directory, containing no
SUSv3> components of type symbolic link, no components
SUSv3> that are dot, and no components that are dot-dot
SUSv3> when the shell is initialized. If an application
SUSv3> sets or unsets the value of PWD , the behaviors of
SUSv3> the cd and pwd utilities are unspecified.
mais bash, pdksh, zsh, dash, ksh93 gardent tous les liens
symboliques dans $PWD si cette variable se trouve dans leur
environnement au demarrage (ce qui permet de propager le
"current-shell-wd" d'un shell a l'autre).
J'ai un petit souci dans un Makefile. Je souhaite faire une commande pour faire une version de mon projet sous forme de tar. Voici ce que j'ai déjà fait:
tar: cleanall tar cfj simu.`date +%d-%m-%y.%H-%M`.tar.bz2 *
He oui, c'est un projet de simulation ;) Le problème avec ceci, c'est que lors de la décompression de l'archive, tous les fichiers et répertoires du projets sont extraits directement dans le répertoire courant. J'aimerais donc compresser tout dans un répertoire avec une commande du type: tar cfj foo.tar.bz2 rep/
Pour avoir le répertoire courant, j'ai pensé faire: pwd | sed s/^/.*/// Stocké dans une variable du Makefile ca donne: REP = `pwd | sed s/^\/.*\///`
L'idée serait donc de faire: cd .. tar cfj simu.`date +%d-%m-%y.%H-%M`.tar.bz2 $(REP) cd $(REP) [...]
Note que "cd" fait par defaut un "cd -L", mais c'est pour rendre plus clair le fait qu'on ne veut pas faire un chdir(".."), mais un chdir(dirname(current-shell-wd)). Cette version prend en compte le cas ou $(pwd -L) peut etre un lien symbolique (valable pour les shells qui utilisent $PWD et qui ne sont pas POSIX conformants sur ce point [ce qui est le cas de la plupart des shells pretendument conformants]).
J'utilise pax plutot que tar parce qu'elle est standardisee par SUSv3 au contraire de tar, mais c'est histoire de gout.
SUSv3> PWD SUSv3> Set by the shell to be an absolute pathname of the SUSv3> current working directory, containing no SUSv3> components of type symbolic link, no components SUSv3> that are dot, and no components that are dot-dot SUSv3> when the shell is initialized. If an application SUSv3> sets or unsets the value of PWD , the behaviors of SUSv3> the cd and pwd utilities are unspecified.
mais bash, pdksh, zsh, dash, ksh93 gardent tous les liens symboliques dans $PWD si cette variable se trouve dans leur environnement au demarrage (ce qui permet de propager le "current-shell-wd" d'un shell a l'autre).