Bash-builtins . :

gnugo -  
zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

pouvez vous me dire à quoi servent les commandes "." et ":" ?

le manuel dit:
       : [arguments]
	      No effect; the command does nothing beyond  expanding  arguments
	      and  performing any specified redirections.  A zero exit code is
	      returned.

	.  filename [arguments]


Pas clair du tout.

Merci d'avance

3 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    Source man bash

    : [arguments]
        Pas d'effet. Cette commande ne fait rien d'autre que l'expansion des arguments et la mise en place des redirections. Le code de retour est nul. 
    
        . fichier [arguments] 
    source fichier [arguments]
        Lire et exécuter les commandes contenues dans le fichier avec l'environnement du shell en cours, puis renvoyer le code de retour de la dernière commande exécutée dans le fichier. Si le nom du fichier ne contient pas de slash, les chemins d'accès contenus dans PATH sont parcourus pour rechercher le répertoire contenant le fichier. Lorsqu'il est recherché dans le PATH le fichier n'a pas besoin d'être exécutable. Le répertoire de travail en cours est finalement examiné si aucun fichier n'est trouvé dans le 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 positionnel ne sont pas modifiés. Le code de retour est celui de la dernière commande exécutée au sein du script (0 si aucune commande n'est exécutée), et faux si le fichier n'est pas trouvé.


    Pour la 1ère commande, j'avoue ne pas en savoir plus, sinon que je l'emploie souvent avec un "while" de cette façon :
    while :
    ...

    ce qui est un synonyme de :
    while true
    ...

    Ce qui explique bien sa définition. Mais je ne l'ai jamais employé avec des arguments.

    Par contre pour la 2nd, tu as oublié ce qui suivait, en effet le "." est un synonyme de la commande "source".
    0
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      Le Bourne shell original ne connaissait que ., pas source. le point est certainement resté pour compatibilité
      edit: le : permet des commentaires au millieu de commandes
      $ echo 1 ; echo 2 ; : une bière, svp ; echo 3 
      1 
      2 
      3 
      $ echo 1 ; echo 2 ; # une bière, svp ; echo 3 
      1 
      2 
      $ 
      0
    2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Merci ;-)
      0
  2. Utilisateur anonyme
     
    salut,

    un exemple d'expansion
    si var n'est pas encore assignée alors lui assigner foo, si elle est déjà assignée, elle garde la valeur foo
    : ${var:=foo}

    pour les redirections
    dans certaines conditions (ça ne me revient pas immédiatement)
    > filename
    ne fonctionne pas, alors que
    : >filename
    marche très bien.
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Salut,

      Merci.

      Pour l'expansion j'avais plus pensé à l'extraction de sous-chaîne (${paramètre:début:longueur}) mais j'avais du mal à faire le parallèle ;-\

      Pour la redirection, ça doit s'appliquer aux anciens shells, non ? ;-\
      0
  3. gnugo
     
    Je vous remercie
    Par contre j'ai toujours du mal à comprendre la commande source, dans quels cas elle pourrait être utile
    auriez-vous un/des exemple(s) à me montrer ?
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Re-

      L'exemple le plus employé en général est lorsque tu modifies ton fichier ".bashrc" et que tu veux que les modifications soient répercutées sur ton shell actif. Ou tu te déconnectes et te relogues dans la foulée, soit tu sources ton fichier et tu bénéficies des changements immédiatement :

      source ~/.bashrc


      Sinon un petit exemple :

      $ echo $A     # Cette variable n'est pas définie dans mon environnement
      
      $ echo $B     # Idem pour celle là
      
      $ cat brol     # Ce fichier contient 2 variables et 1 commande
      A="toto"
      B="titi"
      ls
      
      $ source brol     # Je source mon fichier. La commande est exécutée
      brol  f2  plop
      
      $ echo $A     # La variable $A est maintenant définie dans mon environnement
      toto
      
      $ echo $B     # Idem pour $B
      titi
      
      $
      0
    2. gnugo
       
      Ah ok tout simplement !
      J'avais mal compris ce que ça faisait

      Merci bien !
      0
    3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Attention toutefois de ne pas appeler un fichier contenant un "exit", sans quoi tu es expulsé de ton shell manu-militari ;-))
      0