Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > Unix
Unix Forum d'entraide sur les systèmes Unix et dérivés (*BSD, AIX, etc.). Avant de poster ->F.A.Q BSD F.A.Q. Aix
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/12/2010, 14h53   #1
Membre Expert
 
Avatar de Bktero
 
Inscription : juin 2009
Messages : 770
Détails du profil
Informations personnelles :
Âge : 24
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : juin 2009
Messages : 770
Points : 1 287
Points : 1 287
Par défaut [KSH] Mémoriser le nombre de fichiers : question sur LET (sun OS)

Bonjour.

En voulant faire un script où j'avais besoin de mémoriser le nombre de fichiers contenu dans un dossier, je suis arrivé à une "bizarrerie" : LET n'accepte pas les substitutions de commandes avec $(...)

Le code exemple :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/ksh

echo 'Sur la variable UNE : avec let et $(...)'
typeset -i UNE=0
let UNE=$(ls | wc -l)
echo "Elle vaut : ${UNE}"

echo 'Sur la variable DEUX : avec ((...))'
typeset -i DEUX=0
((DEUX=$(ls | wc -l)))
echo "Elle vaut : ${DEUX}"

echo 'Sur la variable TROIS :  a linitialisation'
typeset -i TROIS=$(ls | wc -l)
echo "Elle vaut : ${TROIS}"

echo 'Sur la variable QUATRE : `...` '
typeset -i QUATRE=0
QUATRE=`ls | wc -l`
echo "Elle vaut : ${QUATRE}"
J'exécute mon shell (dans un dossier où il y a deux fichiers) et j'ai le résultat suivant :
Citation:
Sur la variable UNE : avec let et $(...)
Elle vaut : 0
Sur la variable DEUX : avec ((...))
Elle vaut : 2
Sur la variable TROIS : a linitialisation
Elle vaut : 2
Sur la variable QUATRE : `...`
Elle vaut : 2
Je n'arrive pas à expliquer pourquoi la variable UNE ne vaut pas 2 en sortie... Seule explication : let n'accepte pas les substitutions avec $(commande). Mais pourquoi ?

En tapant man let, je n'ai rien eu des très concret :
Citation:
NAME
let - shell built-in function to evaluate one or more arith-
metic expressions

SYNOPSIS
ksh
let arg...

DESCRIPTION
ksh
Each arg is a separate "arithmetic expression" to be
evaluated.

EXIT STATUS
The following exit values are returned:

0 The value of the last expression is non-zero.
1 The value of the last expression is zero.

ATTRIBUTES
See attributes(5) for descriptions of the following attri-
butes:

____________________________________________________________
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
|_____________________________|_____________________________|
| Availability | SUNWcsu |
|_____________________________|_____________________________|


SEE ALSO
ksh(1), set(1), typeset(1), attributes(5)

SunOS 5.10 Last change: 15 Apr 1994
Ce que j'ai mis en gras dans le man sous-entend-il qu'on ne peut avoir des "vraies" variables et des nombres en dur dans une expression avec let ?



Merci d'avance de vos réponses




PS : j'ai testé sous SUN8, même résultat.
__________________
Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^

Pour vos problèmes d'embarqué, utilisez le forum dédié !
Bktero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2010, 15h23   #2
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 063
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 063
Points : 4 124
Points : 4 124
je ne crois pas que cela vienne de let :
Code :
1
2
3
4
5
6
7
ksh --version
  version         sh (AT&T Research) 93s+ 2008-01-31
$ ksh
ksh_93s+ $ typeset -i une=0          
ksh_93s+ $ let une=$(ls -1 ~ | wc -l)                                      
ksh_93s+ $ echo $une                 
90
...
?
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2010, 16h08   #3
Membre Expert
 
Avatar de Bktero
 
Inscription : juin 2009
Messages : 770
Détails du profil
Informations personnelles :
Âge : 24
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : juin 2009
Messages : 770
Points : 1 287
Points : 1 287
Par défaut Euh.....

J'essaye d'exécuter ton code et j'obtiens ça :

Citation:

[16:07:13]tdudev02@bt1sssav:/IPSDEVWX/tdudev02
>typeset -i une=0

[16:07:15]tdudev02@bt1sssav:/IPSDEVWX/tdudev02
>let une=$(ls -1 ~ | wc -l)
ksh: une=: more tokens expected

[16:07:21]tdudev02@bt1sssav:/IPSDEVWX/tdudev02
>echo $une
0

[16:07:27]tdudev02@bt1sssav:/IPSDEVWX/tdudev02
>ksh --version
[${_x[(_m=_mm)==(_h=_hh)==(_s=_ss)]}$_h:$_m:$_s]tdudev02@bt1sssav:${PWD}
Une implémentation de ksh qui ne va pas ?
__________________
Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^

Pour vos problèmes d'embarqué, utilisez le forum dédié !
Bktero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2010, 16h59   #4
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 063
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 063
Points : 4 124
Points : 4 124
mais... tu es sur GNU/linux ? lequel ? sinon tu trouveras plus d'aide sur le forum UNIX.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 11h34   #5
Membre Expert
 
Avatar de Bktero
 
Inscription : juin 2009
Messages : 770
Détails du profil
Informations personnelles :
Âge : 24
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : juin 2009
Messages : 770
Points : 1 287
Points : 1 287
Je suis sous SunOS 5.10.

Je pensais que c'était une question générale de Shell, pas forcément lié à l'OS.
__________________
Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^

Pour vos problèmes d'embarqué, utilisez le forum dédié !
Bktero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 12h49   #6
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 063
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 063
Points : 4 124
Points : 4 124
dans mon esprit, sur Linux, on utilise davantage bash, et sur Unix, plus ksh...
ce n'est sans doute qu'une impression

de plus, bien souvent, la version de ksh utilisée sur Unix est la 89...
et les outils ne sont pas GNU (les options de ls, par exemple, ne sont pas toujours les mêmes : --color vs. -G, etc).

mais vu que je n'utilise pas d'Unix, je ne dis peut-être que des bêtises

il vaut donc mieux t'adresser à des personnes qui ont plus de chances d'utiliser la même version de shell et les mêmes outils
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 13h21   #7
Responsable Modération
 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 1 971
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 21
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 1 971
Points : 5 965
Points : 5 965
Bonjour.

Citation:
Envoyé par N_BaH Voir le message
dans mon esprit, sur Linux, on utilise davantage bash, et sur Unix, plus ksh...
ce n'est sans doute qu'une impression
Bah en général c'est plutôt vrai d'après ce que j'ai observé (FreeBSD, OpenSolaris aussi il me semble, etc). On a quelques exception : Mac OS X qui utilise Bash par défaut je crois.

Et puis certains utilisateurs d'Unix utilisent Bash (c'était mon cas pendant un court instant ).

La solution peut être la mieux adaptée : déplacer cette discussion dans le forum Unix et laisser un lien sur le forum Shell pendant une période suffisante.

Cordialement,
Idriss
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 14h22   #8
Expert Confirmé Sénior
 
Homme Laurent Willems
Expert Stop/Start
Inscription : septembre 2002
Messages : 2 544
Détails du profil
Informations personnelles :
Nom : Homme Laurent Willems
Âge : 33
Localisation : Belgique

Informations professionnelles :
Activité : Expert Stop/Start

Informations forums :
Inscription : septembre 2002
Messages : 2 544
Points : 4 249
Points : 4 249
Hello,

Effectivement d'après ces liens (bug db d'opensolaris 10 mais devrait aussi s'appliquer à Solaris 10), Le /bin/ksh est bien la version 88.

http://bugs.opensolaris.org/bugdatab...bug_id=4113420

http://bugs.opensolaris.org/bugdatab...bug_id=6332421

Ils proposent des alternatives dans la section workaround pour pouvoir utiliser la version 93.
__________________
Alea Jacta Test!
Mygale1978 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 14h47   #9
Membre Expert
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 964
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 964
Points : 1 362
Points : 1 362
Ce problème de version de ksh est réglé avec la dernière version de Solaris (Solaris 11 Express) pour laquelle ksh est bien ksh93.
__________________
ɹǝsn *sıɹɐlos*
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 17h02   #10
Membre Expert
 
Avatar de Bktero
 
Inscription : juin 2009
Messages : 770
Détails du profil
Informations personnelles :
Âge : 24
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : juin 2009
Messages : 770
Points : 1 287
Points : 1 287
Bonjour à tous,

J'avoue n'avoir peut-être pas posté à l'endroit le plus pertinent. J'utilise les forums de Dvpez depuis quelques temps, mais j'ai encore un peu de mal des fois. Je ne pensais pas que l'OS influait autant sur le comportement du Shell en plus...

Pour résumé, ça devrait marcher normalement, ce fameux LET, mais ça sera plus un problème de version de ksh lié à mon OS ?

Pour re-clarifier la chose, je travaille bien sous Sun 10 et Sun 8
__________________
Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^

Pour vos problèmes d'embarqué, utilisez le forum dédié !
Bktero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 18h31   #11
Membre Expert
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 964
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 964
Points : 1 362
Points : 1 362
L'OS n'influe pas sur le comportement des shell. Ce qui est important, c'est la version du shell utilisé. Si tu installes ksh93 sur ton Solaris 8 et 10, tu n'auras pas le problème. Si tu utilises dtksh qui est standard sour Solaris 8 et 10, tu ne devrais probablement pas non plus avoir ce problème. Si tu utilises ksh qui est en fait ksh88, ca ne passera pas.

Ce n'est pas spécifique au shell. Si par exemple tu utilises firefox 2 sous n'importe quel OS, tu ne pourra pas avoir les features apportées par firefox 3 ou +.
__________________
ɹǝsn *sıɹɐlos*
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2010, 18h48   #12
Responsable Modération
 
Avatar de ok.Idriss
 
Homme Idriss Neumann
Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)
Inscription : février 2009
Messages : 1 971
Détails du profil
Informations personnelles :
Nom : Homme Idriss Neumann
Âge : 21
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Consultant en SSII et étudiant au CNAM Paris (ingénieur SI)

Informations forums :
Inscription : février 2009
Messages : 1 971
Points : 5 965
Points : 5 965
Bonsoir.

On peut quand même dire que l'OS a une influence car beaucoup ne changent pas les versions qui leur sont fournies par défaut (moi le premier).

Et puis comme le dit N_Bah, certaines versions de commandes GNU diffèrent des versions POSIX qu'on trouve sur les Unix, ça joue aussi parfois.

Cordialement,
Idriss
ok.Idriss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 09h45   #13
Membre Expert
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 964
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 964
Points : 1 362
Points : 1 362
Citation:
Envoyé par ok.Idriss Voir le message
On peut quand même dire que l'OS a une influence car beaucoup ne changent pas les versions qui leur sont fournies par défaut (moi le premier).
Ok, c'est une conséquence indirecte de la version de l'OS.
Citation:
Et puis comme le dit N_Bah, certaines versions de commandes GNU diffèrent des versions POSIX qu'on trouve sur les Unix, ça joue aussi parfois.
Je dirais même plus, toutes les commandes Gnu ont des options supplémentaires, voire incompatibles avec POSIX ...
__________________
ɹǝsn *sıɹɐlos*
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h43.


 
 
 
 
Partenaires

Hébergement Web