Tonio94 a écrit :
Bonjour,
Dans un script en ksh (sous Solaris) j'ai besoin d'écrire une ligne dans 2 fichiers, le premier tout à la fin et le second à l'avant dernière ligne (en conservant la dernière).
Pas de soucis pour faire ça avec sed, le problème est qu'il me créé un fichier temporaire que je dois renommer avec le nom du bon fichier et donc supprimer le bon fichier.
Problème : Je n'ai pas les droits pour rm et pour mv. Je peux juste écrire dans le fichier. Alors j'aimerais pouvoir le faire avec un simple appel Perl (-i), si quelqu'un pouvait m'aider pour la syntaxe à utiliser.
Merci.
|
Intéressant. T'as le droit "w" sur le fichier mais pas sur le répertoire qui le contient.
Il y a une technique shell pour lire et écrire le même fichier sans passer par un fichier temporaire malheureusement elle nécessite d'avoir le droit d'effacement
Code :
- #!/bin/sh
- exec 3<fichier_a_traiter
- rm -f fichier_a_traiter
- while read line 0<&3
- do
- # traitement de la ligne
- ... $line .... $line ...
- done >fichier_a_traiter
|
Le rm -f est obligatoire car il permet de détacher logiquement le nom du fichier de ses data. Les data sont toujours dans le buffer 3 mais le nom ne leur sont plus associées. Et donc quand tu recrées le fichier via la redirection, le système lui attribue un nouvel ident et va y écrire les data.
Si tu ne fais pas de rm, alors le nom du fichier est toujours associé aux data et la redirection va les purger avant qu'elles ne soient lues et le buffer 3 ne contient alors plus rien.
D'où l'obligation impérative de pouvoir faire du rm.
Sinon désolé, je ne connais pas le perl...
Message édité par Sve@r le 13-07-2009 à 11:26:23
---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.