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 :

liste=`ls` ne fonctionne pas avec espaces


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Septembre 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Septembre 2019
    Messages : 11
    Par défaut liste=`ls` ne fonctionne pas avec espaces
    Bonjour

    La commande liste=`ls` ne fonctionne pas avec des espaces dans les noms de fichiers. Les espaces sont considérés comme des séparateurs de noms de fichiers. Existe-il une autre commande pour récupérer la liste des fichiers d'un répertoire dans une variable..... ?

    Merci

  2. #2
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2019
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2019
    Messages : 108
    Par défaut
    Bonjour,

    Essaye:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $ IFS='\n'
    $ for f in $(ls); do echo $f; done

  3. #3
    Membre régulier
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Septembre 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Septembre 2019
    Messages : 11
    Par défaut
    Ça marche. Merci !

  4. #4
    Membre émérite Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 348
    Par défaut
    ls fonctionne avec tous les noms de fichiers, c'est la récupération de sa sortie qui fonctionne mal, car ce n'est pas fait pour.
    Pour récupérer la liste des fichiers non cachés du répertoire courant dans un tableau, tu peux faire
    Si tu veux en plus les fichiers cachés, avant la précédente commande, tu fais

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 295
    Par défaut
    Bonjour

    C'est de la mauvaise programmation.
    Les `backticks` sont obsolètes. Il faut utiliser $( ).
    On utilise pas ls dans un script.
    Les alternatives à ls sont find pour trouver les fichiers et stat pour avoir les caractéristiques des fichiers.

    Ensuite, soit tu traites directement ton fichier dans l'option -exec du find; soit tu utilises xargs dans une conduite (pipe); soit tu alimentes une boucle while avec la liste des fichiers.

  6. #6
    Membre régulier
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Septembre 2019
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Septembre 2019
    Messages : 11
    Par défaut
    re

    utiliser IFS='\n' fonctionne .... partiellement.

    contexte : j'ai un script qui fait en gros liste=$(ls) for f in liste .....etc
    J'ai déposé ce script sur une machine distante par ssh. Lorsque je l'exécute à partir de ma machine avec IFS='\' il fonctionne parfaitement (même si c'est de la mauvaise programmation).
    Par contre si je vais sur la machine distante
    1) il ne démarre pas du bureau (qui es son emplacement)
    2) il fonctionne correctement si je le lance en ligne de commande
    3) il déraille si je le lance à partir de l'explorateur de fichiers en coupant les noms aléatoirement

    J'imagine que la variable IFS à quelque chose à voir la dedans.....

    Si vous avez une idée....

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 673
    Par défaut
    non, on n'utilise pas ls dans une substitution de commande, pour itérer dans une boucle, ni dans un script, à cause des difficultés dans lesquels tu entres.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for f in *; do echo ">$f<"; done
    c'est aussi simple.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Liste déroulante ne fonctionne pas avec IE8
    Par beegees dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 30/05/2012, 10h25
  2. Réponses: 11
    Dernier message: 06/07/2011, 19h30
  3. LIKE qui ne fonctionne pas avec une espace
    Par CinePhil dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/10/2008, 16h46
  4. Réponses: 11
    Dernier message: 05/03/2008, 15h07
  5. Réponses: 7
    Dernier message: 24/01/2006, 11h03

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