IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Variable versus fichier temporaire


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Homme Profil pro
    babasseur
    Inscrit en
    Janvier 2023
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : babasseur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2023
    Messages : 18
    Points : 10
    Points
    10
    Par défaut Variable versus fichier temporaire
    Salut,
    J'ai une question purement théorique.

    J'ai tendance à préférer stocker le résultat de commandes aussi souvent que possible dans des variables y compris là où il pourrait être tentant d'utiliser des fichiers temporaires.

    Typiquement par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    resultat=$(ls | sed 's/^/prefixe/')
    Ce qui présente pas mal d'avantages: rapidité, éviter la gestion des droits d'accès disque, conflits potentiels avec des fichiers existants, etc

    Par contre quid de la commande suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    resultat=$(cat video_de_50Go.avi)
    Ca fait boum ? ^^

    (Tu me diras que je n'ai qu'à tester pour voir...)

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 559
    Points : 19 397
    Points
    19 397
    Par défaut
    mais qui veut stocker le contenu d'un fichier .avi dans une variable ?

    et qui utilise ls dans un script ?!
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 251
    Points : 13 477
    Points
    13 477
    Par défaut
    Bonjour

    Citation Envoyé par N_BaH Voir le message
    mais qui veut stocker le contenu d'un fichier .avi dans une variable ?
    Tous ceux qui viennent de la programmation objet et qui considèrent le pointeur comme le point d'entrée absolu pour désigner quoi que ce soit. On retrouve ces codeurs en scripts, et on doit leur expliquer qu'en programmation shell, ce sont des mauvais réflexes. Du moins des maladresses.

    Ca fait boum ?
    Sur le fond, la substitution de commande $( ) sert à récupérer du texte. Le contenu d'un fichier *.avi n'est probablement pas du texte. Donc la commande est inadéquate.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 699
    Points : 30 999
    Points
    30 999
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par NeoType Voir le message
    J'ai tendance à préférer stocker le résultat de commandes aussi souvent que possible dans des variables y compris là où il pourrait être tentant d'utiliser des fichiers temporaires.
    Jusque là, je ne vois pas de souci. On fait tous la même chose. Je te recommanderais toutefois de quoter ta variable pour éviter toute interprétation éventuelle qui viendrait modifier le résultat de ta commande avant sa copie dans la variable => resultat="$(ta commande)".

    Citation Envoyé par NeoType Voir le message
    Ce qui présente pas mal d'avantages: rapidité, éviter la gestion des droits d'accès disque, conflits potentiels avec des fichiers existants, etc
    Ben si la gestion des noms des fichiers temporaires est bien faite (utilisation de "/tmp" et de techniques assurant les noms unique comme "$$" ou "mktemp") tu n'auras aucun souci de droit d'accès ou de collision, seul restera le souci de la vitesse d'accès disque. Et si "/tmp" est monté en RAM alors même ça ça disparait (mais en contrepartie on retombe sur le souci de la taille maximale pouvant être utilisée en RAM)

    Citation Envoyé par NeoType Voir le message
    Par contre quid de la commande suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resultat=$(cat video_de_50Go.avi)
    Ca fait boum ? ^^
    C'est une question qui ne dépend que de la puissance de ton ordi. Sur un ordi avec 64Go de RAM, ou bien avec 32Go de RAM et 32Go de swap, ça ne devrait pas faire boum.
    Mais dans 99% des cas on n'a pas besoin de mémoriser 50Go pour traiter 50Go. Et je dis "99%" pour laisser la porte ouverte mais franchement je ne vois pas de situation qui nécessiterait de stocker 50Go de data (ou même de façon plus générale qui nécessiterait de stocker tout un fichier même si ce fichier ne pèse que 10ko).

    Citation Envoyé par Flodelarab Voir le message
    Sur le fond, la substitution de commande $( ) sert à récupérer du texte... Donc la commande est inadéquate.
    Non, ça sert à récupérer de la data, ni plus, ni moins. Pourquoi la réduire à du seul texte ? Surtout sur un système Linux qui justement ne fait aucune différence entre texte et binaire !!! La commande fonctionnera parfaitement y compris sur un fichier ".avi".
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 251
    Points : 13 477
    Points
    13 477
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Non, ça sert à récupérer de la data, ni plus, ni moins. Pourquoi la réduire à du seul texte ? Surtout sur un système Linux qui justement ne fait aucune différence entre texte et binaire !!!
    En voilà une belle bêtise. La norme POSIX dit qu'une ligne valide finit par \n. Et tout code binaire ne correspond pas à une lettre. Voilà pourquoi la commande file différencie les fichiers binaires des fichiers texte.
    Pourquoi la réduire à du seul texte ?
    Car c'est la description dans l'aide.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 504
    Points : 43 349
    Points
    43 349
    Par défaut
    et qui utilise ls dans un script ?!
    Tout le monde, sauf ceux que tu as gaulé

    Ca fait boum ?
    ça ne fera pas boom, car les processus ont des limitations en terme d'usage des ressources, plus ou moins contrôlable avec ulimit.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 699
    Points : 30 999
    Points
    30 999
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    La norme POSIX dit qu'une ligne valide finit par \n. Et tout code binaire ne correspond pas à une lettre. Voilà pourquoi la commande file différencie les fichiers binaires des fichiers texte.
    Je ne te parle pas de ligne ou de lettres mais de l'OS (et son système de fichiers) qui, lui, ne fait aucune différence entre "data + \n" et "data".
    Et la commande file ne différencie rien, elle "décrit" juste les fichiers qu'on lui donne, se basant pour ça sur le "magic number" éventuel ou une heuristique statistiques. Et cette description n'est faite que pour les humains qui, eux, peuvent avoir besoin de savoir ce qu'ils manipulent.
    Quant à la norme POSIX, elle est faite pour ceux qui veulent créer des fichiers qui devront être vus (par d'autres humains) comme des fichiers texte. Ou qui veulent créer des programmes qui devront traiter des fichiers textes.

    Citation Envoyé par Flodelarab Voir le message
    En voilà une belle bêtise.
    Oui c'est vrai, effectivement depuis une mise à jour (qui semble être la 4.3), la substitution refuse maintenant de récupérer de la data qui n'est pas texte (plus exactement elle vire les '\0' éventuels).
    Ce qui ne change pas vraiment le fond du problème qui était quand-même "est-ce que récupérer un fichier (ok texte) de 50Go est possible dans une variable" et où répondre "cette commande est inadéquate" était tout sauf pertinente
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Les fichiers temporaires
    Par mzt.insat dans le forum Administration système
    Réponses: 4
    Dernier message: 08/08/2005, 14h48
  2. [Applet] Créer un fichier temporaire
    Par leminipouce dans le forum Applets
    Réponses: 21
    Dernier message: 28/07/2005, 16h16
  3. [Tomcat]Tomcat Fichier temporaire
    Par kitiara999 dans le forum Tomcat et TomEE
    Réponses: 5
    Dernier message: 19/07/2005, 23h13
  4. Y as il des fichiers temporaires sous builder
    Par Moutonstar dans le forum C++Builder
    Réponses: 2
    Dernier message: 12/12/2004, 14h24
  5. Comment changer le répertoire des fichiers temporaires ?
    Par devdev dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 01/09/2004, 14h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo