Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 10/02/2018, à 23:51

MichelZ

[Résolu] Script contenant un tableau ne s'exécute pas hors du Terminal

Bonjour,
Je veux récupérer une liste de dossiers dans un tableau :

lisRep=($(find /home/moi -maxdepth 1 -type d))
echo ${lisRep[2]} >> /home/moi/resultat  # Pour vérifier si ça marche

Si je l'exécute via le Terminal, pas de problème.
Mais si je veux l'exécuter depuis le gestionnaire de fichiers (clic droit > Exécuter) ou via un raccourci-clavier, ça plante.
Est-ce les parenthèses extérieures qui posent problème ?
Si je mets des "" au lieu de (), j'obtiens une variable texte au lieu d'un tableau.

(je suis sous Xubuntu, donc Thunar pour le gestionnaire de fichiers)

Dernière modification par MichelZ (Le 11/02/2018, à 10:56)

Hors ligne

#2 Le 11/02/2018, à 01:05

Watael

Re : [Résolu] Script contenant un tableau ne s'exécute pas hors du Terminal

salut,

d'abord, mauvaise méthode :

listDrepertoires=( /home/moi/*/ )

parce que si un nom de répertoire contient un espace, ce nom sera découpé en autant d'élément du tableau.
et il faut TOUJOURS mettre les variables (les tableaux sont des variables) entre guillemets.

« ça plante », «ça marche pas » ne sont pas des "symptômes".
c'est comme dire au médecin « ch'ui malade »

il y a un shebang dans ton script ?


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#3 Le 11/02/2018, à 02:01

MichelZ

Re : [Résolu] Script contenant un tableau ne s'exécute pas hors du Terminal

Merci pour ta réponse,
J'ai essayé ton conseil :

rep="/home/moi"
echo "trace1" >> $rep/trace
lisRep=( $rep/*/ )
echo "trace2" >> $rep/trace
echo ${lisRep[0]} >> $rep/trace
echo "trace3" >> $rep/trace

Si je lance le script dans le Terminal (au Terminal, je tape: /home/moi/Essai1.sh), dans /home/moi/trace, j'ai :

trace1
trace2
/home/moi/Bureau/
trace3

C'est correct.
Mais si je le lance depuis le gestionnaire de fichier (clic droit sur Essai1.sh > Exécuter) , dans /home/moi/trace, j'ai :

trace1

Donc ce sont bien les parenthèses qui posent problème.
Maintenant, si je mets des guillemets :

lisRep="( $rep/*/ )"

ça n'est plus interprété comme un tableau : quand je lance le script depuis le gestionnaire de fichier, dans la trace j'ai :

trace1
trace2

Hors ligne

#4 Le 11/02/2018, à 02:11

Watael

Re : [Résolu] Script contenant un tableau ne s'exécute pas hors du Terminal

il y a un shebang dans ton script ?

et, il faut TOUJOURS mettre les variables (les tableaux sont des variables), quand elles doivent être développées, entre guillemets.

Dernière modification par Watael (Le 11/02/2018, à 02:12)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#5 Le 11/02/2018, à 10:54

MichelZ

Re : [Résolu] Script contenant un tableau ne s'exécute pas hors du Terminal

Ah, c'était ça ! Je ne savais pas ce qu'est un shebang (je me suis mis au shell y a quelques jours seulement), je pensais que c'était un mot d'argot (genre: "y a un bug" ou "y a un loup") ... ha ha ha ...
Donc là j'ai rajouté en tête :

#!/bin/bash

et ça marche !
Merci Watael !

Hors ligne