C'est une erreur très classique....
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.
# Cette erreur est très classique
Posté par Pascal . En réponse au message Sed ... je vais craquer. É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.