Bonjour
voila j'ai ma petite ligne sed qui est:
sed -e s/[hs]d[a-z]/${INSTALL_DISK}/g ${TARGET}/etc/lilo.conf
elle fonctionne bien, pas de problemes, je vois bien la modif sur mon écran (j'ose pas dire la sortie standard pour ce qui suit ...).
C'est bien jolie d'avoir la modificaition qui s'affiche à l'écran mais j'aimerais bien l'envoyer vers ${TARGET}/etc/lilo.conf. Donc je fais un:
sed -e s/[hs]d[a-z]/${INSTALL_DISK}/g ${TARGET}/etc/lilo.conf > ${TARGET}/etc/lilo.conf
Et la c'est le drame, plus rien dans ${TARGET}/etc/lilo.conf ... le fichier est vide ! Si jamais je fais un >> la ca marche, mais c'est un ajout ... donc j'ai l'ancienne config :) J'ai essayé &> mais non plus, ce n'est pas la sortie de erreurs ...
J'ai bien tenté de mettre tout ca dans une variable avec un modConf="`....`." mais je n'ai plus les retours à la ligne ...
Rien dans le man de sed ...
Je craque, deux heures que je suis dessus ce petit détail qui m'empeche d'avance.
Quelqu'un aurait-il une idée ? Pourquoi je ne peux pas récupérer ma sortie standard de sed ?!!!
Merci d'avance :/
# lecture + écriture
Posté par Naha (site web personnel) . Évalué à 2.
La bonne solution est (je pense) :
sed -e s/[hs]d[a-z]/${INSTALL_DISK}/g ${TARGET}/etc/lilo.conf > ${TARGET}/etc/lilo.conf2
mv ${TARGET}/etc/lilo.conf2 ${TARGET}/etc/lilo.conf
[^] # man sed
Posté par Damien Pobel (site web personnel) . Évalué à 2.
note le -i (in-place).
https://damien.pobel.fr
[^] # Re: man sed
Posté par DjinnS . Évalué à 2.
Merci ca marche nikel aussi ;)
[^] # Re: man sed
Posté par tgl . Évalué à 4.
(Erf, désolé, mais le troll Debian étant à l'agonie, il faut bien en profiter tant qu'il est encore tiède...)
[^] # Re: man sed
Posté par DjinnS . Évalué à 2.
Un troll où ca ?
Il existe d'autre distrib que la Debian ? :p
[^] # Re: lecture + écriture
Posté par DjinnS . Évalué à 2.
MERCI !!!!!
Effectivement ca pose probleme, pourtant en général ca marche ... j'imaginais que le fichier était laché par sed mais il doit continuer de l'utiliser sans doute enfin je sais pas.
Merci en tout cas :)
[^] # Re: lecture + écriture
Posté par fusible . Évalué à 1.
[^] # Re: lecture + écriture
Posté par fusible . Évalué à 1.
# Ouai mais en fait non ....
Posté par DjinnS . Évalué à 2.
Je montre:
Donc ok, base saine ... ensuite:
Donc résultat:
- plus rien dans lilo.conf
- un fichier lilo.confe qui apparait (même si je suis du sud, mon kernel lui ne l'est pas !!!)
- j'y comprends plus rien
Précision:
Où est la cocille ?!
[^] # Re: Ouai mais en fait non ....
Posté par Naha (site web personnel) . Évalué à 1.
Sinon essaye ma méthode ;-) (d'ailleurs je ne connaissais pas cette option -i, il faudra que j'essaye).
[^] # Re: Ouai mais en fait non ....
Posté par DjinnS . Évalué à 2.
Oui, le mv me semble la qd meme plus simple :)
[^] # Re: Ouai mais en fait non ....
Posté par Didier (site web personnel) . Évalué à 6.
C'est tout à fait logique ;) Je m'explique :
L'option -i signifie selon le man :
L'option -i te permet donc de modifier le contenu du fichier passé en argument. Tu as le choix de modifier l'original sans sauvegarder le fichier original (pas de suffixe) ou bien de sauvegarder le fichier original sous un nouveau nom (nom du fichier original + suffixe).
Reprenons la commande que tu as utilisé :
Tu passes à l'option -i une valeur : « e ». La commande sed doit donc modifier le fichier original, mais en conserver une copie dans ${TARGET}/etc/lilo.confe (avec le suffix « e » !). L'option -e n'est pas spécifiée (le « e » est compris comme étant la valeur de l'option -i). Ensuite, ton problème de fichier vide est le même que précédemment : tu lis et tu écris dans le même fichier en même temps.
La bonne commande si tu ne veux pas de sauvegarde est la suivante :
La même, mais avec sauvegarde (on n'est jamais trop prudent) :
Voilà ;)
# Cette erreur est très classique
Posté par Pascal . Évalué à 2.
Tout les dévellopeurs shell la font toujours une fois....
Il ne faut pas oublier que Linux est un système multitache, et le shell se sert de cela.
Regardons un peu comment fonctionne un shell pour comprendre me problème:
Lorsque tu fais
sed "......" lilo.conf > lilo.conf.
Comment interprete le shell interprète t-il cela.
Pour lui, cela veut dire: lance le programme sed avec ses arguments et mets le contenu de sa sortie standart dans lilo.conf.
Que ce passe t-il dans l'ordre chronologique:
- Le shell crée un processus, se connecte à lui avec un tube unix pour récupérer sa sortie.
- Le processus nouvellement créé lance sed avec ses arguments. Sed ouvre alors en lecture le fichier lilo.conf.
- En même temps (système multitache), le shell ouvre le fichier lilo.conf en ecriture pour pouvoir y écrire le résultat de la commande. Mais à cause du symbole '>', il efface d'abord son contenu.
- En même temps, sed essaye de lire le contenu de lilo.conf qui est maintenant vide, il ne renvoit donc rien sur sa sortie standard. Le contenu de lilo.conf est perdu.......
J'espère que j'ai été clair dans mes explications. Ce genre de trucs se produit quand on essaye de réaliser des modifications sur des fichiers avec sed, cut ....
Il y a plusieurs solutions au problème comme il a été dit un peu plus tot:
- utilser un fichier temporaire: c'est le plus simple et ce qu'on fait le plus souvent:
- utiliser l'option de -i de sed qui permet de faire l'edition du fichier sur place, et donc sans utiliser la redirection du shell. Mais cela ne fonctionne uniquement si tu utilises sed.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.