Bash-builtins . :

gnugo -  
zipe31 Messages postés 36402 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
A voir également:

3 réponses

zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
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
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
Merci ;-)
0
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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
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
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
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
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
gnugo
 
Ah ok tout simplement !
J'avais mal compris ce que ça faisait

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