Manipulation de fichiers dans un terminal

Je ne me souviens pas l’avoir activé depuis l’installation de mon système debian, pourtant :

michel@debG53SW:~$ shopt extglob extglob on michel@debG53SW:~$
Mais je vais quand même vérifier en installant une nouvelle debian dans une machine virtuelle.

[quote=“MicP”]Je ne me souviens pas l’avoir activée depuis l’installation de mon système debian, pourtant :

michel@debG53SW:~$ shopt extglob extglob on michel@debG53SW:~$
Mais je vais quand même vérifier en installant une nouvelle debian dans une machine virtuelle.[/quote]
Idem ici, je suppose que c’est actif par défaut dans les versions récentes de Debian.
En tous cas je retiens le [mono]!(…)[/mono], qui va m’être bien utile !

Comme quoi, il vaut mieux se méfier et toujours bien vérifier le contexte, car d’une distribution à l’autre, d’une version à l’autre etc.
Je remercie lroy de l’avoir précisé. :slightly_smiling:

=======
Après installation debian en utilisant [mono]0b31bccccb048d20b551f70830bb7ad0 debian-7.7.0-amd64-netinst.iso[/mono]

michel@debShopt:~$ uname -a Linux debShopt 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1 x86_64 GNU/Linux michel@debShopt:~$ lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 7.8 (wheezy) Release: 7.8 Codename: wheezy michel@debShopt:~$ shopt extglob extglob on michel@debShopt:~$

[quote=“MicP”]Je ne me souviens pas l’avoir activé depuis l’installation de mon système debian, pourtant :

michel@debG53SW:~$ shopt extglob extglob on michel@debG53SW:~$
Mais je vais quand même vérifier en installant une nouvelle debian dans une machine virtuelle.[/quote]

So6@so6debian:~$ shopt extglob extglob on so6@so6debian:~$

j’affirme ne pas l’avoir activé puisque j’ignorai son existence jusqu’à ce soir :blush:

donc si je comprend bien !(?) signifie déplacer l’intégralité du répertoire dans de le répertoire en argument excepté le contenu des parenthèses ? (qui dans ce cas précis est aussi l’argument)

édit: j’espère mettre assez bien exprimé :open_mouth:

en cherchant rapidement, il semblerait que le extglob s’active quand le paquet bash-completion est installé.

Tout ce que contient le répertoire depuis lequel la commande a été lancée, sauf ce qui corresponds au motif (pattern) qui est entre parenthèses.

=======
Par exemple : [mono]mv !(debian|autreRépertoire|fichierExclu.jpg) répertoireCible[/mono]

<=> Tout ce que contient le répertoire depuis lequel la commande a été lancée sera déplacé dans le répertoire [mono]répertoireCible[/mono],

sauf ce qui est dans le répertoire [mono]debian[/mono],

sauf ce qui est dans le répertoire [mono]autreRépertoire[/mono],

sauf le fichier nommé [mono]fichierExclu.jpg[/mono]

Dans ce motif, le [mono]|[/mono] est un [mono]OR[/mono] (OU inclusif)

=======

[quote=“lroy”]…il semblerait que le extglob s’active quand le paquet bash-completion est installé…[/quote] [mono]bash-completion[/mono] semble avoir été installé par défaut dans la machine virtuelle [mono]debian 7.7[/mono] que je viens de créer.

J’ai désinstallé le paquetage [mono]bash-completion[/mono], désactivé extglob ([mono]shopt -u extglob[/mono]), redémarré et constaté que [mono]extglob[/mono] était à toujours à [mono]off[/mono],

Ensuite, j’ai réinstallé le paquetage [mono]bash-completion[/mono], me suis reconnecté dans un terminal texte, et j’ai pu constater qu’effectivement :

L’installation du paquetage [mono]bash-completion[/mono] fait bien passer [mono]extglob[/mono] de [mono]off[/mono] à [mono]on[/mono]

Clair et limpide merci MIcP :041

Avec grand plaisir,

d’autant que ce partage de connaissances m’a aussi appris que ces options du shell [mono]bash[/mono] n’étaient pas activées par défaut,

et que c’est bien le paquetage [mono]bash-completion[/mono] qui a activé cette option.

Et cette information sera grandement utile s’il est question de créer un script portable (mais j’ai encore beaucoup à apprendre sur tout)

Merci à tous :slightly_smiling:

pour créer des scripts portables, je te conseille chaudement l’analyseur syntaxique shellcheck (qui est disponible dans les dépôts debian depuis quelques mois), et même s’il ne faut pas forcément appliquer au pied de la lettre toutes ses recommandations, il permet d’apprendre plein de choses sur le scripting shell.

=======
Je vois aussi que dans ce fil de discussion, [size=110]agentsteel[/size] avait transmis ce lien, mais j’étais passé à côté à l’époque…

=======
Je vois aussi que dans ce fil de discussion, [size=110]agentsteel[/size] avait transmis ce lien, mais j’étais passé à côté à l’époque…[/quote]

Super cet analyseur de script, je suis en train d’apprendre les bases je vais m’en servir :038

Une mine de liens et conseils au sujet de l’interpréteur de commandes [mono]bash[/mono] : Bash Hackers Wiki Frontpage

je voudrais juste signaler que le shell système par défaut dans Debian depuis quelques années c’est dash et non plus bash (qui lui reste proposé par défaut en tant que shell interactif pour les utilisateurs).
à titre personnel je préfère éviter autant que possible d’utiliser un shell spécifique pour écrire des scripts, et chercher plutôt à se conformer au standard posix qui garantit une certaine portabilité.
et puis écrire dans son script #!/bin/sh au lieu de #!/usr/bin/env bash permet un gain monumental de 10 caractères ! :slightly_smiling:

[quote=“lroy”]je voudrais juste signaler que le shell système par défaut dans Debian depuis quelques années c’est dash et non plus bash (qui lui reste proposé par défaut en tant que shell interactif pour les utilisateurs).
à titre personnel je préfère éviter autant que possible d’utiliser un shell spécifique pour écrire des scripts, et chercher plutôt à se conformer au standard posix qui garantit une certaine portabilité.
et puis écrire dans son script #!/bin/sh au lieu de #!/usr/bin/env bash permet un gain monumental de 10 caractères ! :slightly_smiling:[/quote]

Je suis un peu confus avec la définition exacte de shell dit “interactif” et “non-interactif”, de ce que je comprend le shell interactif est plus ou moins le shell qui traite les commandes de l’entrée utilisateur et le shell “non-interactif” est celui qui exécute un script en background !!??? Ce qui voudrais dire que l’on entre les commandes en bash mais que l’on traite les scripts en dash !?? :12

Oui, c’est bien le comportement par défaut avec Debian.

Oui, c’est bien le comportement par défaut avec Debian.[/quote]

OK c’est mieux quand c’est clair :slightly_smiling:
Par contre Iroy donne le commentaire [mono]#!/usr/bin/env[/mono] “env” est le fichier de dash ?

À mon avis [mono]#!/usr/bin/env bash[/mono] n’est qu’une manière un peu tarabiscotée d’écrire [mono]#!/bin/bash[/mono] :wink:
Plus d’infos peuvent se trouver via [mono]man env[/mono].

c’est effectivement un peu tarabiscoté, mais il peut y avoir une raison de l’écrire comme ça, notamment si plusieurs versions de l’interpréteur sont installées sur le système, par exemple une version plus récente dans /usr/local/bin ou une version beta dans ~/.local/bin. en utilisant /usr/bin/env on s’assure de prendre la même version que celle résolue par le path.
pour les shells ce n’est pas forcément très utile, mais pour des langages comme python ou ruby par exemple il n’est pas rare de vouloir utiliser des versions plus récentes que celles installées dans le système, c’est pour cela qu’on évite de hard-coder le shebang #!.

sinon dash est l’exécutable /bin/dash et /bin/sh est l’un de ses liens symboliques.

tu peux d’ailleurs taper simplement sh dans ton shell pour te retrouver sous dash, tu vas voir que c’est roots :slightly_smiling:

Env est une commande de modification temporaire de [mono]“variables d’environnement”[/mono] elle contrôle la “bascule” d’un shell a un autre comme par exemple une “bascule” en [mono]dash[/mono] sur un script avec la ligne de commentaire [mono]#!/usr/bin/env bash[/mono]

[quote]Il existe une commande qui permet de faire des modifications temporaires, à court terme, sur l’environnement. Cela peut aussi être utilisé pour afficher les variables d’environnement courantes. Il s’agit de la commande env :

env

Le signe dollar peut être utilisé pour récupérer la valeur des variables d’environnement dans les lignes de commandes. Par exemple, la commande suivante peut être utilisée pour lister les fichiers du bureau (dossier Desktop) de l’utilisateur courant[/quote]

ici doc.ubuntu-fr.org/variables_d_environnement