Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > Unix > Solaris
Solaris Forum d'entraide sur le système Solaris.
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 10/09/2009, 13h55   #1
Invité de passage
 
Inscription : septembre 2009
Messages : 10
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 10
Points : 2
Points : 2
Par défaut Problème au source d'une librairie sh

J'ai le problème suivant :

au login, le contenu d'un .sh qui est sourcé dans le .profile passe en ligne de commande.

(sourcé comme suit :
. lib.sh
)

Résultat, le fichier d'historique se remplit et écrase les information précédentes.

supposons que dans le .sh on ai :

#!/bin/sh
ma_fonction(){
moncode
}

Dans le fichier historique on aura :

moncode
}
\202^C\201

Je ne comprend pas ce qui se passe. D'autant plus que j'ai un autre système "sensé" être identique qui ne pose pas de problème. Je n'ai pas encore trouvé la différence entre les deux.
esprism est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2009, 15h07   #2
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 856
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 856
Points : 1 616
Points : 1 616
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Tu as bien un ; à la fin de ta déclaration de fonction ?

http://www.shellunix.com/sh.html
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2009, 16h08   #3
Invité de passage
 
Inscription : septembre 2009
Messages : 10
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 10
Points : 2
Points : 2
Merci pour cette piste.

Effectivement il n'y a pas de ";" à la fin des fonction, cependant, une fois ajoutés ça ne change rien.

Ce qui m'intrigue le plus, c'est qu'au moment du source, HISTFILE et les autres variables concernant l'historique ne sont pas initialisées (elles le sont à la fin du ".profile" et le source est au début du ".profile").

Si je met "HISTFILE=/dev/null" je peux garder mon historique mais dans ce cas, je n'ai plus d'historique tant que je ne suis pas revenu en bash.

Je n'ai malheureusement pas les connaissances nécessaires pour trouver des pistes par moi même.
esprism est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2009, 16h14   #4
Membre Expert
 
Avatar de jabbounet
 
frederic frances
Inscription : juin 2009
Messages : 1 693
Détails du profil
Informations personnelles :
Nom : frederic frances
Âge : 36

Informations forums :
Inscription : juin 2009
Messages : 1 693
Points : 2 068
Points : 2 068
Citation:
Envoyé par Alek-C Voir le message
Tu as bien un ; à la fin de ta déclaration de fonction ?

http://www.shellunix.com/sh.html
tu es en sh??

je ne me souviens pas que sh supporte les fonctions (contrairement à ksh). ou je dit une bêtise.
jabbounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2009, 16h20   #5
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 856
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 856
Points : 1 616
Points : 1 616
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Vu le lien que j'ai mis, il semble bien accepter les fonctions, mais j'avoue ne pas me servir de sh tous les jours

Tu as essayé de définir ta fonction comme cela:
Code :
1
2
nom_fonction ()
{ liste_commandes ;}
?

regarde ici aussi :

http://www.compuspec.net/reference/s...function.shtml
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2009, 09h16   #6
Invité de passage
 
Inscription : septembre 2009
Messages : 10
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 10
Points : 2
Points : 2
Je ne pense pas que ça vienne d'un problème à la définition des fonctions, elles marchent bien.

Je pense plutôt à un fonctionnement "normal" mais incompris. Et donc je ne sais pas comment le contourner ne comprenant pas d'où viens le problème.

(je suis bien en ksh)
esprism est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2009, 09h58   #7
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 856
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 856
Points : 1 616
Points : 1 616
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Ben si tu as ça :
au début de ton script, tu es en .sh
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2009, 13h36   #8
Membre Expert
 
Avatar de jabbounet
 
frederic frances
Inscription : juin 2009
Messages : 1 693
Détails du profil
Informations personnelles :
Nom : frederic frances
Âge : 36

Informations forums :
Inscription : juin 2009
Messages : 1 693
Points : 2 068
Points : 2 068
sous ksh la commande history se fait avec fc si je me souviens bien.
jabbounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2009, 22h16   #9
Membre Expert
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 911
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 911
Points : 1 262
Points : 1 262
Citation:
Envoyé par Alek-C Voir le message
Ben si tu as ça :
au début de ton script, tu es en .sh
Sauf si le script est exécuté explicitement (ex: ksh xxx) ou implicitement (. xxx) par un autre shell, ce qui est le cas ici.
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/09/2009, 22h20   #10
Membre Expert
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 911
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 911
Points : 1 262
Points : 1 262
Citation:
Envoyé par jabbounet Voir le message
sous ksh la commande history se fait avec fc si je me souviens bien.
Toutes les versions de ksh disposent en fait de l'alias interne "history".
Sur les dernières versions de ksh, c'est "hist -l" au lieu de "fc -l".
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2009, 00h28   #11
Membre Expert
 
Avatar de jabbounet
 
frederic frances
Inscription : juin 2009
Messages : 1 693
Détails du profil
Informations personnelles :
Nom : frederic frances
Âge : 36

Informations forums :
Inscription : juin 2009
Messages : 1 693
Points : 2 068
Points : 2 068
Citation:
Envoyé par jlliagre Voir le message
Toutes les versions de ksh disposent en fait de l'alias interne "history".
Sur les dernières versions de ksh, c'est "hist -l" au lieu de "fc -l".
exact, et fc est aliasé directement sur hist (renommage?)


ceci dit j'ai déjà vu plusieurs machines d'installation récente (des solaris notament) ou history n'etait pas reconnu comme commande,
contrairement a fc.
jabbounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2009, 07h58   #12
Invité de passage
 
Inscription : septembre 2009
Messages : 10
Détails du profil
Informations forums :
Inscription : septembre 2009
Messages : 10
Points : 2
Points : 2
Pour en revenir au problème, je pense que la question c'est comprendre comment marche le source d'un fichier. Visiblement il passe le contenu du fichier en ligne de commande.

J'ai trouvé un moyen tout bête de contourner le problème (je sauve mon fichier historique avant et le recopie après) mais ça n'explique pas ce qui se passe.

Par contre, j'ai bien l'impression que mon .profile est lu 3 fois, certainement la piste à explorer.
esprism est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2009, 09h07   #13
Membre Expert
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 911
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 911
Points : 1 262
Points : 1 262
Citation:
Envoyé par jabbounet Voir le message
exact, et fc est aliasé directement sur hist (renommage?)
hist est un alias de fc sur les ksh récents.
Citation:
ceci dit j'ai déjà vu plusieurs machines d'installation récente (des solaris notament) ou history n'etait pas reconnu comme commande,
contrairement a fc.
Tu dois confondre. L'alias history est interne à ksh depuis très longtemps et par exemple documenté avec Solaris 2.4 (1994).
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2009, 10h08   #14
Membre Expert
 
Avatar de jabbounet
 
frederic frances
Inscription : juin 2009
Messages : 1 693
Détails du profil
Informations personnelles :
Nom : frederic frances
Âge : 36

Informations forums :
Inscription : juin 2009
Messages : 1 693
Points : 2 068
Points : 2 068
Citation:
Envoyé par jlliagre Voir le message
hist est un alias de fc sur les ksh récents.

Tu dois confondre. L'alias history est interne à ksh depuis très longtemps et par exemple documenté avec Solaris 2.4 (1994).
je crois que nous sommes d'accord, history est un alias, pas une commande.

j'ai déjà vu des station ou quand tu lançais history cela te renvoyais command not found. après je ne vais pas généraliser sur toutes les installations de la terre, je parle simplement d'une expérience personnelle.

sur cette machine a 2/3 ans tout au plus, history est un alias sur fc et non sur hist comme l'indique la norme ksh93.

Citation:
$uname -a
SunOS xxxxx 5.10 Generic_125100-10 sun4u sparc SUNW,A70
$which history
no history in .....
$alias history
history='fc -l'
$which fc
/usr/bin/fc
$alias fc
fc: alias not found
$psrinfo -v
Status of virtual processor 0 as of: 09/15/2009 12:22:41
on-line since 07/10/2009 13:12:52.
The sparcv9 processor operates at 1600 MHz,
and has a sparcv9 floating point processor
autrement:
http://www.research.att.com/sw/downl.../man1/ksh.html
Citation:
Aliasing

The first word of each command is replaced by the text of an alias if an alias for this word has been defined. An alias name consists of any number of characters excluding metacharacters, quoting characters, file expansion characters, parameter expansion and command substitution characters, and =. The replacement string can contain any valid shell script including the metacharacters listed above. The first word of each command in the replaced text, other than any that are in the process of being replaced, will be tested for aliases. If the last character of the alias value is a blank then the word following the alias will also be checked for alias substitution. Aliases can be used to redefine built-in commands but cannot be used to redefine the reserved words listed above. Aliases can be created and listed with the alias command and can be removed with the unalias command.

Aliasing is performed when scripts are read, not while they are executed. Therefore, for an alias to take effect, the alias definition command has to be executed before the command which references the alias is read.

The following aliases are compiled into the shell but can be unset or redefined:
autoload='typeset -fu'
command='command '
compound='typeset -C'
fc=hist
float='typeset -lE'
functions='typeset -f'
hash='alias -t - -'
history='hist -l'
integer='typeset -li'
nameref='typeset -n'
nohup='nohup '
r='hist -s'
redirect='command exec'
source='command .'
stop='kill -s STOP'
suspend='kill -s STOP $$'
times='{ { time;} 2>&1;}'
type='whence -v'
mais bon sur le fond je pense que nous sommes d'accord, donc pas trop la peine de philosopher sur history....

Dernière modification par jabbounet ; 15/09/2009 à 10h22.
jabbounet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/09/2009, 17h40   #15
Membre Expert
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 911
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 911
Points : 1 262
Points : 1 262
Oui. fc est à la fois une commande externe et une builtin. Si tu n'est pas en ksh, history ne marche pas mais fc marche toujours. Le problème est que l'historique n'est pas mis à jour.

Pour la question initiale, oui la commande "." source le fichier. Elle est strictement équivalente à la saisie au clavier du contenu du fichier et donc son exécution par le shell courant, contrairement à un script classique qui lance un autre shell pour être exécuté.
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2009, 14h12   #16
Membre Expert
 
Homme Alexis
Intégrateur d'Exploitation
Inscription : février 2003
Messages : 856
Détails du profil
Informations personnelles :
Nom : Homme Alexis
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Intégrateur d'Exploitation
Secteur : Biens de consommation

Informations forums :
Inscription : février 2003
Messages : 856
Points : 1 616
Points : 1 616
Envoyer un message via ICQ à Alek-C Envoyer un message via Skype™ à Alek-C
Citation:
Envoyé par jlliagre Voir le message
Sauf si le script est exécuté explicitement (ex: ksh xxx) ou implicitement (. xxx) par un autre shell, ce qui est le cas ici.
Décidément, il y a vraiment des évidences que je ne maîtrise pas...
Alek-C est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 21h34.


 
 
 
 
Partenaires

Hébergement Web