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 :

Mon script s'arrête tout seul


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Consultant E-Learning
    Inscrit en
    Août 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant E-Learning

    Informations forums :
    Inscription : Août 2022
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Mon script s'arrête tout seul
    Bonjour,

    Je dois exécuter plusieurs sed et des un cat >> via une boucle sur 2 000 fichiers.
    Cependant au bout de 800 fichiers la boucle s'arrête :/ : les 700 premiers fichiers sont bien traités mais les 100 suivants sont en fait 100 fichiers parmi les 1 300 autres.

    Est ce que vous savez pourquoi ?? Est-ce que les scripts on un temps limité ?


    Il m'arrive aussi des fois le message "Segmentation fault (core dumped)" sur un script très long.

    Cordialement

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 708
    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 708
    Points : 31 018
    Points
    31 018
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Amaury77 Voir le message
    Est ce que vous savez pourquoi ??
    Sans que tu nous montres le script en question...

    Citation Envoyé par Amaury77 Voir le message
    Est-ce que les scripts on un temps limité ?
    Non. Maintenant on peut imaginer que le script, à force de créer des fichiers (peut-être dans "/tmp") finit par saturer le filesystem...
    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]

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 252
    Points : 13 478
    Points
    13 478
    Par défaut
    Bonjour

    N'est-ce pas une boucle en forme de for fichier in $(ls *), et qui s'est fait prendre par les limitations ? On déplore ce genre de mauvais code sur le forum constamment. Mais les internautes persistent car "ça marche".

    Il faut considérer un fichier, avec 1 ligne par cible.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Consultant E-Learning
    Inscrit en
    Août 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant E-Learning

    Informations forums :
    Inscription : Août 2022
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Oui tout à fait c'est une simple boucle for avec un ls -v, je ne peux pas envoyer les fichiers car le messages serait trop long, est ce que tu aurait un exemple de structure avec : un fichier, avec 1 ligne par cible.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 252
    Points : 13 478
    Points
    13 478
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while read ligne
    do
            echo "macommande $ligne"
    done < fichier.txt
    Sachant qu'en bash, le fichier.txt peut être remplacé par une substitution de processus <( ).
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 708
    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 708
    Points : 31 018
    Points
    31 018
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    N'est-ce pas une boucle en forme de for fichier in $(ls *), et qui s'est fait prendre par les limitations ? On déplore ce genre de mauvais code sur le forum constamment. Mais les internautes persistent car "ça marche".
    C'est vrai que ce n'est pas super propre (si le dossier contient des sous-dossiers alors le ls * va exploser en étoile et je suis étonné de ne pas encore avoir vu N_BaH arriver en piqué diagonal venir expliquer qu'on ne met pas de "ls" dans un script) mais je n'ai pas réussi à reproduire cette limitation.
    J'ai en effet créé 50000 fichiers for f in $(seq 50000); do touch "fic_$f"; done j'ai parfaitement pu les récupérer => for f in $(ls); do echo "$f"; done |wc => 50000

    Citation Envoyé par Amaury77 Voir le message
    je ne peux pas envoyer les fichiers car le messages serait trop long
    Ton script est si long que ça ??? Généralement ça traduit une mauvaise conception.
    Mais même avec un script super long, tu n'es pas capable de poster juste la structure de boucle avec un traitement minimal, exemple
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for fic in $(ls -v); do
    	echo "$fic"
    done
    Enfin bon, vu que tu as dit ce que tu faisais, ça ne doit pas être bien différent de ce que je viens d'écrire.

    Donc comme un certain modérateur te le dira s'il vient à passer par là, on ne fait pas de "ls" dans un script. Parce que "ls" interprète certains caractères et qu'un fichier nommé par exemple mon'$'\n''fait'$'\n''chier ne pourra pas être pris en compte (c'est lui qui m'a défié de traiter ce fichier via "ls" et je n'y suis toujours pas arrivé).

    Tu veux traiter des fichiers dans un dossier: for f in *; do echo "[$f]"; done.
    Tu veux traiter des fichiers dans une arborescence: while read f; do echo "[$f]"; done < <(find dossier_racine_arborescence -type f)
    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]

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 562
    Points : 19 397
    Points
    19 397
    Par défaut
    en général, le problème n'est pas le nombre d'arguments, mais le nombre de caractères d'une ligne de commande (ARG_MAX), mais il me semble me souvenir que le message serait différent, et explicite.
    le segfault peut venir d'un fichier non trouvé, et de données non reçues...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while read -d ''; do echo "$REPLY"; done < <(find "$chemin" -type f -print0 | sort -zV)
    -print0 sinon la boucle ne lira que mon$'\n', et pas mon$'\n'fait$'\n'chier.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Consultant E-Learning
    Inscrit en
    Août 2022
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant E-Learning

    Informations forums :
    Inscription : Août 2022
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Tu veux traiter des fichiers dans un dossier: for f in *; do echo "[$f]"; done.
    C'est cela, mais les derniers fichiers ne sont pas bien traité voir sauter car issu d'un ls , si j'utilise une boucle while comme cela

    Citation Envoyé par Flodelarab Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while read ligne
    do
            echo "macommande $ligne"
    done < fichier.txt
    Sachant qu'en bash, le fichier.txt peut être remplacé par une substitution de processus <( ).
    je devrais faire une boucle de boucles pour traiter tous les fichiers ?

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

Discussions similaires

  1. Script sh / boucle sans fin qui s'arrête toute seule
    Par FaTaL25 dans le forum Shell et commandes GNU
    Réponses: 9
    Dernier message: 27/09/2012, 12h42
  2. [Turbo Pascal] Mon programme s'arrête tout seul
    Par kenny94 dans le forum Turbo Pascal
    Réponses: 2
    Dernier message: 10/09/2011, 07h46
  3. [PC fixe] Mon ordinateur s'arrête tout seul.
    Par zilis dans le forum Ordinateurs
    Réponses: 4
    Dernier message: 22/01/2011, 19h27
  4. [MySQL] Script php avec insertion dans base de données qui s'arrête tout seul
    Par tofito dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 04/12/2008, 21h39
  5. mon portable s'arrête tout seul
    Par tsague dans le forum Ordinateurs
    Réponses: 4
    Dernier message: 07/05/2008, 11h40

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