Normal que 'touch' mette plus de temps que '>'
car lors que l'on lance touch, il y a création d'un processus,
pas pour > ou c'est le shell (déjà lancé) qui fait le boulot.
Le problème vient de Cédric qui dit qu'il faut utiliser l'astuce « avec modération qd meme ca pourrait etre dangereux (style qd on veut créer un fichier et qu'il existe déja..). » : si le fichier existe déjà, on le vide, c'est l'objet de l'astuce.
Non, touch change la date de dernière modification du fichier alors qu'il ne modifie pas le fichier (s'il existe).
Si tu fait >> fichier, ça ne change pas le fichier, donc ni la date de dernière modification.
Plus sérieusement, c'est en installant pour la première fois un LFS que j'ai découvert cette façon d'enchaîner les commandes, et que c'est utilisé à outrance dans le LFS. C'est un peu plus long (ben oui, deux "&" contre un ";" ;-)) que d'enchainer les commandes en les séparant par un ";", mais au moins, ça évite de lancer un make suite à un ./configure qui a foiré !
c'est bien de resortir le lien, encore faut il le comprendre... sur la partie shell interactif, qui est quand meme un gros morceau, tcsh a rien a envier a bash...
Oui mais meme dans un shell interactif on a bien souvent envie de taper un petit script de rien du tout (genre un for nom in `ls` etc) et c'est penible si le shell ne permet pas de faire ca. (c'est pour ca que je suis passé de tcsh a bash, malgré certaines pertes (correction des fotes d'orthographe, etc) (pas de troll svp, je sais bien que je pourrais le faire meme avec bash si je prenais la peine de lire les pages man)
bah tcsh permet de faire des choses sympa avec foreach... donc bon ...
j'attends toujours un vrai argument anti tcsh pour la partie interactive. il est certain que pour le cote scripting only, sh est plus portable tout ca. mais pour le cote interactif, bof.
Ce n'est pas forcément si flagrant que ça, et étant donné le nombre de fonctionnalité de ZSH (par rapport à bash entre autre) ça ne m'étonne pas :
il gère tout bash ou presque (y compris un compatibilité bash-completion dans les version 4.1.X ou supérieur), les fonctions ksh et [t]csh.
il apporte une telle souplesse, et une telle maniabilité, qu'il permet de ce passer dans beaucoup de cas d'interface graphique, et donc de gagner de la mémoire :)
si je fait u petit calcul rapide :
la mémoire prise par zsh légèrement supérieur à bash
la mémoire économisée par l'utilisation de zsh = très important
=>mem(zsh)<mem(bash)+mem(application)
je parle pour faire les mêmes choses :)
toujours sous bash, j'ai essayé un simple :
> monfichier
alors que je remplissait "monfichier" avec un autre programme. Ca a bien vidé le fichier, alors qu'il était en cours d'utilisation.
Si le fichier est en cours d'utilisation (utiliser /usr/sbin/lsof pour confirmer), ça ne marche car il y a deux descripteurs de fichier ouverts sur le même fichier. C'est le dernier qui ferme le fichier qui défini la taille.
Exemple :
$ free -s 1 > toto &
[1] 17839
[ attendons un peu]
$ > toto
$ cat /dev/null > toto ; ll toto ; sleep 2 ; ll toto
-rw-r--r-- 1 f.matias users 0 fév 24 02:38 toto
-rw-r--r-- 1 f.matias users 72996 fév 24 02:38 toto
La première taille à 0 de toto c'est car le jobs %1 n'a pas encore écrit depuis la fermeture du fichier par "> toto".
C'est même une caratéristique appréciée d'unix. Imaginons le "drame" si le process qui écrit en continu fait un seek ! Ça nous priverait aussi de la possibilité d'écriture pas plusieurs process dans un fichier.
Cette caractéristique, n'est pas lié au shell mais au noyau.
y a t'il moyen de forcer l'utilisation du même descripteur de fichier pour vider le contenu du fichier en cours de remplissage par une autre application?
# vider un fichier / créer un fichier vide
Posté par Pierre Habouzit . Évalué à 1.
[^] # Re: vider un fichier / créer un fichier vide
Posté par togno . Évalué à 1.
[^] # Re: vider un fichier / créer un fichier vide
Posté par samds . Évalué à 1.
real 0m0.001s
user 0m0.000s
sys 0m0.000s
[2003-10-05 @ 16:03:52][sam@skikda][~] rm touch
rm: détruire fichier régulier vide `touch'? y
détruit `touch'
[2003-10-05 @ 16:03:55][sam@skikda][~] time `touch touch`
real 0m0.025s
user 0m0.000s
sys 0m0.000s
[2003-10-05 @ 16:03:58][sam@skikda][~]
:-)
sam
[^] # Re: vider un fichier / créer un fichier vide
Posté par Anonyme . Évalué à 1.
car lors que l'on lance touch, il y a création d'un processus,
pas pour > ou c'est le shell (déjà lancé) qui fait le boulot.
[^] # Re: vider un fichier / créer un fichier vide
Posté par gnujsa . Évalué à 1.
real 0m0.009s
user 0m0.000s
sys 0m0.000s
$ time perl -e '`> toto`;'
real 0m0.025s
user 0m0.020s
sys 0m0.010s
héhé ;-)
# Pas mal!
Posté par ced . Évalué à 2.
A utiliser avec modération qd meme ca pourrait etre dangereux (style qd on veut créer un fichier et qu'il existe déja..).
Je pense que je vais rester à touch pour créer des fichiers vides :) Mais je note qd meme
>pwet
c vrai que c plus rapide que
rm pwet | touch pwet
[^] # Re: Pas mal!
Posté par calo . Évalué à 1.
[^] # Re: Pas mal!
Posté par Anonyme . Évalué à 1.
Le problème vient de Cédric qui dit qu'il faut utiliser l'astuce « avec modération qd meme ca pourrait etre dangereux (style qd on veut créer un fichier et qu'il existe déja..). » : si le fichier existe déjà, on le vide, c'est l'objet de l'astuce.
[^] # Re: Pas mal!
Posté par matiasf . Évalué à 1.
Si tu fait >> fichier, ça ne change pas le fichier, donc ni la date de dernière modification.
[^] # Re: Pas mal!
Posté par Cédric Foll . Évalué à 1.
Pourquoi utiliser un pipe ????
plutot faire
rm pwet;touch pwet
[^] # Re: Pas mal!
Posté par Gyro Gearllose . Évalué à 1.
rm pwet && touch pwet
Au moins, si le rm échoue, la 2nde commande n'est pas exécutée.
[^] # Re: Pas mal!
Posté par Nap . Évalué à 1.
[^] # Re: Pas mal!
Posté par Gyro Gearllose . Évalué à 1.
Plus sérieusement, c'est en installant pour la première fois un LFS que j'ai découvert cette façon d'enchaîner les commandes, et que c'est utilisé à outrance dans le LFS. C'est un peu plus long (ben oui, deux "&" contre un ";" ;-)) que d'enchainer les commandes en les séparant par un ";", mais au moins, ça évite de lancer un make suite à un ./configure qui a foiré !
[^] # Re: Pas mal!
Posté par dido . Évalué à 1.
>pwet
c vrai que c plus rapide que
rm pwet | touch pwet
Cela ne donne cependant pas toujours le même résultat.
Imagines que ton fichier pwet fasse 1go et qu'il soit toujours ouvert par un processus.
# pas portable sur tous les shells
Posté par quad . Évalué à 2.
> fichier
Avec un csh, tcsh (d'autres ?) te renvoie un "Invalid null comand."
Y'a pas que bash dans la vie :-)
Allez, je vais pas rester sur une phrase à fort potentiel trollesque,
donc je fournis une solution :
:> fichier
Y'a un caractère de plus, c'est le seul inconvénient.
[^] # Re: pas portable sur tous les shells
Posté par togno . Évalué à 1.
[^] # Re: pas portable sur tous les shells
Posté par Gruik Man . Évalué à 1.
[^] # Re: pas portable sur tous les shells
Posté par Ptah . Évalué à 1.
[^] # Re: pas portable sur tous les shells
Posté par Mathieu Pillard (site web personnel) . Évalué à 1.
[^] # Soit dit sans troller...
Posté par Salagnac . Évalué à 1.
[^] # Re: Soit dit sans troller...
Posté par Mathieu Pillard (site web personnel) . Évalué à 1.
[^] # Re: Soit dit sans troller...
Posté par Simon Huet . Évalué à 1.
[^] # Re: Soit dit sans troller...
Posté par Benjamin (site web personnel) . Évalué à 1.
[^] # Re: Soit dit sans troller...
Posté par Bapt (site web personnel) . Évalué à 1.
il gère tout bash ou presque (y compris un compatibilité bash-completion dans les version 4.1.X ou supérieur), les fonctions ksh et [t]csh.
il apporte une telle souplesse, et une telle maniabilité, qu'il permet de ce passer dans beaucoup de cas d'interface graphique, et donc de gagner de la mémoire :)
si je fait u petit calcul rapide :
la mémoire prise par zsh légèrement supérieur à bash
la mémoire économisée par l'utilisation de zsh = très important
=>mem(zsh)<mem(bash)+mem(application)
je parle pour faire les mêmes choses :)
[^] # Re: Soit dit sans troller...
Posté par wismerhill . Évalué à 1.
Fais plutôt un for nom in *, ça t'évitera de lancer un ls inutilement et ça fait trois caractères de moins à écrire.
# Re: vider un fichier / créer un fichier vide
Posté par Pooly (site web personnel) . Évalué à 1.
echo -n "" > fichier
(ok inutile si on a bash )
[^] # Re: vider un fichier / créer un fichier vide
Posté par Pierre Tramo . Évalué à 1.
echo > fichier
[^] # Re: vider un fichier / créer un fichier vide
Posté par matiasf . Évalué à 1.
il faut :
echo -n > fichier
# Re: vider un fichier / créer un fichier vide
Posté par Whoo (site web personnel) . Évalué à 1.
Moi je préfere un :
cat /dev/null > mon fichier
Qui permet de vider un fichier en cours d'utilisation.
@+ Whoo
linux / linux / linux
[^] # Re: vider un fichier / créer un fichier vide
Posté par togno . Évalué à 1.
toujours sous bash, j'ai essayé un simple :
> monfichier
alors que je remplissait "monfichier" avec un autre programme. Ca a bien vidé le fichier, alors qu'il était en cours d'utilisation.
[^] # Re: vider un fichier / créer un fichier vide
Posté par matiasf . Évalué à 2.
Exemple :
$ free -s 1 > toto &
[1] 17839
[ attendons un peu]
$ > toto
$ cat /dev/null > toto ; ll toto ; sleep 2 ; ll toto
-rw-r--r-- 1 f.matias users 0 fév 24 02:38 toto
-rw-r--r-- 1 f.matias users 72996 fév 24 02:38 toto
La première taille à 0 de toto c'est car le jobs %1 n'a pas encore écrit depuis la fermeture du fichier par "> toto".
C'est même une caratéristique appréciée d'unix. Imaginons le "drame" si le process qui écrit en continu fait un seek ! Ça nous priverait aussi de la possibilité d'écriture pas plusieurs process dans un fichier.
Cette caractéristique, n'est pas lié au shell mais au noyau.
[^] # Re: vider un fichier / créer un fichier vide
Posté par Linux_GTI . Évalué à 6.
[^] # Re: vider un fichier / créer un fichier vide
Posté par zarkod . Évalué à 1.
# Re: vider un fichier / créer un fichier vide
Posté par shelton2 (site web personnel) . Évalué à 1.
>! fichier
sinon ca marche pas :(
[^] # Re: vider un fichier / créer un fichier vide
Posté par marvin . Évalué à 1.
On peut néamoins désactiver cette fonction en rajoutant dans son "~/.zhrc" :
setopt clobber
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.