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 25/01/2017, à 00:24

Kasuus

[Résolu] Explication source. et export

Bonjour à tous!

Débutant sur Linux je vous sollicite pour un peu d'aide afin de comprendre une petite chose:

Voulant mettre en place un indice de temps sur mon history j'ai trouvé une ligne de commande permettant de mettre en place un "horodateur"
voici celle-ci:

 export HISTTIMEFORMAT="%F %T : " 

Bon rien de bien sorcier!
J'ai voulu le mettre dans un script (horo.sh) mais celui ci ne fonctionnait pas quand je lance ./horo.sh
Après quelques recherche je trouve le terme "source"  et là en lançant 

source ./horo.sh

paf ça fonctionne!

La question est de savoir pourquoi dans un premier temps le script ne fonctionnait pas, et que fait ce fameux source?

PS: Je sais que je peux mettre cela dans « /root/.bashrc » pour un usage permanent, mais là n'est pas la question smile

Dernière modification par Kasuus (Le 25/01/2017, à 23:24)

Hors ligne

#2 Le 25/01/2017, à 00:58

Watael

Re : [Résolu] Explication source. et export

salut,

un script s'exécute dans un environnement différent (un processus fils) qui ne modifie pas l'environnement courant (le processus parent).

la commande source fait s'exécuter le script dans l'environnement courant.


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

Hors ligne

#3 Le 25/01/2017, à 03:04

MicP

Re : [Résolu] Explication source. et export

Bonjour Kasuus et Watael

La commande history est une primitive (ou "fonction intégrée" si tu préfère) de l'interpréteur de commandes bash
Alors, plutôt que de créer un fichier spécifique à "sourcer", autant assigner une valeur à la variable HISTTIMEFORMAT depuis ton fichier ~/.bashrc
et de cette façon, il ne sera pas nécessaire d'utiliser export qui est aussi une primitive du shell (en français : "interpréteur de commandes") bash

michel@debg53sw:~$ type history
history est une primitive du shell
michel@debg53sw:~$ 
michel@debg53sw:~$ type export
export est une primitive du shell
michel@debg53sw:~$ 

=======

Kasuus a écrit :

…que fait ce fameux source?…

michel@debg53sw:~$ type source
source est une primitive du shell
michel@debg53sw:~$ 

Donc, voir :

man bash

où tu pourra lire :

…
        .  fichier [arguments]
       source fichier [arguments]
              Lire  et  exécuter  les commandes du fichier dans l'environnement de l'interpréteur actuel, puis renvoyer l'état final de la dernière commande exécutée dans fichier. Si le
              nom du fichier ne contient pas de barre oblique, les chemins d'accès contenus dans PATH sont parcourus pour rechercher le répertoire contenant le  fichier.  Lorsqu'il  est
              recherché  dans  PATH  le  fichier  n'a pas besoin d'être exécutable. Lorsque bash n'est pas en mode posix, le répertoire de travail actuel est finalement examiné si aucun
              fichier n'est trouvé dans PATH. Si l'option sourcepath de la commande interne shopt est désactivée, le PATH n'est pas parcouru. Si des arguments  sont  fournis,  ils  sont
              transmis  dans les paramètres positionnels lorsque le fichier est exécuté. Sinon les paramètres positionnels ne sont pas modifiés. L'état renvoyé est l'état de la dernière
              commande terminée au sein du script (0 si aucune commande n'a été exécutée) et faux si le fichier n'est pas trouvé ou ne peut être lu.
…

Tu peux aussi remplacer la commande source par un simple point

. ./horo.sh

=======
NOTE : Le fichier "sourcé" (./horo.sh dans ton message) n'a pas besoin d'avoir l'attribut "exécutable".
             Le fichier ~/.bashrc est d'ailleurs un exemple de fichier qui est "sourcé".

=======
J'attribue à HISTTIMEFORMAT la valeur "%d-%m-%Y %T " dans mon fichier ~/.bashrc
comme tu peux le constater dans l'extrait suivant :

…
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000

# pour afficher la date/heure des commandes enregistrées dans history
HISTTIMEFORMAT="%d-%m-%Y %T "

…

ce qui donne :

…
  222  25-01-2017 02:05:07 ls
  223  25-01-2017 02:05:10 history 
…

Dernière modification par MicP (Le 26/01/2017, à 03:03)

Hors ligne

#4 Le 25/01/2017, à 23:23

Kasuus

Re : [Résolu] Explication source. et export

Merci MicP et Watael

Explication plus que limpide!

En clair à faire un export dans l'history, qui sont deux primitives, je me compliquais pour rien. Et je devine que ce genre de manip est déconseillée?

Merci encore!

Hors ligne

#5 Le 25/01/2017, à 23:54

MicP

Re : [Résolu] Explication source. et export

… je me compliquais pour rien …

Je n'ai fait que développer la réponse de Watael
Il n'y a à peine que quelques mois que j'ai supprimé la commande export devant les variables HIST_… de mon fichier .bashrc
alors, un peu comme pour la confiture, j'ai trouvé la bonne occasion de tout étaler ici.

Entre les conseils de Watael et les miens, n'hésite pas une seconde, il est extrêmement plus compétent que moi, et c'est pas du cirage de pompes,
il m'a dernièrement bien aidé sur un de mes brouillons de scripts, et je me suis régalé du cours qu'il m'a donné en quelques lignes extrêmement efficaces.

Dernière modification par MicP (Le 26/01/2017, à 03:04)

Hors ligne