Retourner aux forums || Retourner au forum Programmation.shell
Programmation.shell : Execution d'une commande avec redirection...
Posté par bugjargal () le 26 juillet 2004J'écris un petit script pour des gens qui veulent compiler un noyau sans trop se pencher sur le pb (je sais mais tant pis pour eux)
pour lancer les differents "make", je passe par une fonction qui contient (sans backquotes) :
make $1 $AFFICHE
si je remplace les variables par du dur pour donner une idée, un echo sur cette ligne donne, par exemple :
make dep >/dev/null 2>compil_du_lun_26_jui_16_08
Cette commande execute le make dep correctement en m'affichant tout à l'écran :(
et finit par :
make: *** Pas de règle pour fabriquer la cible `>/dev/null'. Arrêt.
Quelqu'un peut-il m'expliquer SVP ?
Précision : je teste la même commande à la ligne de commande et tout va bien :
Un écran propre pendant l'exectution du "make dep" et les warnings dans le fichier compil_du_lun_26_jui_16_08...
Plus marrant (hum... ) :
les lignes (avec backquotes) :
echo "Début de make $1 $AFFICHE"
`make $1 $AFFICHE`
donnent :
Début de make dep >/dev/null 2>compil_du_lun_26_jui_16_21
md5sum: AVERTISSEMENT: 1 des 13 sommes de contrôle checksums ne concordent pas.
make: *** Pas de règle pour fabriquer la cible `>/dev/null'. Arrêt.
./compilation: line 62: make[1]:: command not found
Pas d'affichage en dehors des warnings (donc interpretation du ">/dev/null" je suppose ), et pourtant, toujours tentative de faire un "make >/dev/null" et plantage...
Je comprends plus...
Oscourt...
> Lire le message (5 commentaires, moyenne: 2,2).
shell
c'est le shell qui "détecte" et interprête certains caractères spéciaux comme >, < ou encore |, puis qui construit l'appel des programmes que tu lances.
en clair, le shell va construire la commande make avec le contenu de tes variables, mais ne cherchera pas à interpréter leur contenu comme pouvant contenir des caractères spéciaux. c'est comme si on passait de :
[gc@meuh /tmp] echo citron > /dev/null
à :
[gc@meuh /tmp] echo citron '>' '/dev/null'
citron > /dev/null
pour faire ce que tu souhaites, tu es obligé de faire une commande sans redirection et une commande avec redirection dans ton script, que tu brancheras selon le contenu d'une autre variable par exemple.
-
[^]Re: shell
-
[^]Re: shell
Posté par tgl () le 26/07/2004 à 15:26. (lien). Évalué à 5.Ou encore tu peux utiliser 'eval' pour forcer l'expension de tes variables avant l'interprétation de la ligne de commande :
% foo="foo" % bar=">/dev/null" % echo $foo $bar foo >/dev/null % eval echo $foo $bar %
Lors du premier echo, comme l'a dit gc, deux arguments ont été passés et affichés. Pour le deuxième par contre, grâce au eval, bash a d'abord changé "echo $foo $bar" en "echo foo >/dev/null", puis a interprété cette ligne complète comme il le fait d'habitude, avec donc un seul argument et une redirection sur /dev/null.-
[^]Re: shell
-
Moi aussi j'ai un script sur ma machine
Il s'appelle make-kpkg et bon dieu qu'il fonctionne bien ;-)
Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.shell



Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.