# Comparaison du scripting sous différents shell

**URL:** <https://www.debian-fr.org/t/comparaison-du-scripting-sous-differents-shell/26344>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 10:10 UTC](https://www.debian-fr.org/t/comparaison-du-scripting-sous-differents-shell/26344 "2016-02-20T22:10:29Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 10:10 UTC](https://www.debian-fr.org/t/comparaison-du-scripting-sous-differents-shell/26344/1 "2016-02-20T22:10:29Z")

</div>

> [@syam](#):
>
> [quote=«&nbsp;MisterFreez&nbsp;»]La question c’est faut il apprendre bash ou sh ?

À ce sujet, il y a eu de menus soucis lors du passage de bash à dash comme shell par défaut pour /bin/sh, initié si j’ai bonne mémoire par Ubuntu puis mis en place quelque temps après par Debian (sid/squeeze).  
L’avantage c’est que ça a permis de nettoyer les quelques scripts qui utilisaient des extensions «&nbsp;propriétaires&nbsp;» à bash.[/quote]  
Non c’est sous l’impulsion de Debian. Tu crois vraiment qu’ubuntu a la gueule des barbus qui sont stricts avec les standards ? Le «&nbsp;d&nbsp;» de dash veut dire Debian et etch devait utiliser dash mais ce ne fut pas le cas par manque de temps.

> [@syam](#):
>
> Par contre, j’avoue avoir un faible pour les expressions régulières ~= intégrées à bash, pour les gros scripts ça améliore énormément les performances par rapport à des processus externes (sed, perl, grep, …). Ce qui en soi n’est pas très gênant tant que le script a le bon en-tête #!/bin/bash, et à condition qu’il ne soit jamais sourcé par un script tournant sous dash ou autres !

Oui c’est pour le même genre de raison qu’il m’arrive de scripter avec zsh. Regarde celui là :

[code]function videDownload (){  
zmodload zsh/datetime  
zmodload zsh/files  
zmodload -F zsh/stat b:zstat

```
dir="$HOME/Téléchargements"

# On cherche les fichiers plus vieux d'une semaine
date=$((EPOCHSECONDS-60*60*24*7*3))

IFS='
'
for file in $dir/**/* ; do
    if [! -d $file]; then
        zstat -A atime +atime $file
        if [$atime -lt $date]; then
            rm $file
        fi
    else
        rmdir $file 2> /dev/null
    fi
done

```

}[/code]  
Aucun appel à un programme extérieur, du zsh pur et dur. 😃

> [@Totor](#):
>
> Sur une bonne parties des distributions récentes, le lien /bin/sh pointe vers le bash.

Qui est cencé se lancer dans un mode de compatibilité. C’est pas parce qu’une erreur est généralisée qu’il faut l’utiliser…

---

<div class="post-metadata">

**Author:** ![ggoodluck47](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/g/c67d28/32.png) [@ggoodluck47](https://www.debian-fr.org/u/ggoodluck47)\
**Post date:** [Février 20, 2016, 10:15 UTC](https://www.debian-fr.org/t/comparaison-du-scripting-sous-differents-shell/26344/2 "2016-02-20T22:15:44Z")

</div>

Salut,

Personnellement j’écris mes scripts sous la forme :

```auto

```

Et libre à l’utilisateur de changer de shell 😉

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 10:15 UTC](https://www.debian-fr.org/t/comparaison-du-scripting-sous-differents-shell/26344/3 "2016-02-20T22:15:46Z")

</div>

Je me suis déjà posé la question de l’usage de env.  
Je ne sais pas où c’est défini (POSIX ? ni la page man ni la page info ne donnent d’information là de ssus), donc quand c’est du sh, je préfère mettre /bin/sh car je sais que c’est un standard.

---

<div class="post-metadata">

**Author:** ![L0u](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/l/b77776/32.png) [@L0u](https://www.debian-fr.org/u/L0u)\
**Post date:** [Février 20, 2016, 10:15 UTC](https://www.debian-fr.org/t/comparaison-du-scripting-sous-differents-shell/26344/4 "2016-02-20T22:15:47Z")

</div>

[quote=“MisterFreez”]Je me suis déjà posé la question de l’usage de env.  
Je ne sais pas où c’est défini (POSIX ? ni la page man ni la page info ne donnent d’information là de ssus), donc quand c’est du sh, je préfère mettre /bin/sh car je sais que c’est un standard.[/quote]

fais un man env

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 10:15 UTC](https://www.debian-fr.org/t/comparaison-du-scripting-sous-differents-shell/26344/5 "2016-02-20T22:15:51Z")

</div>

[quote=“L0u!$”][quote=“MisterFreez”]Je me suis déjà posé la question de l’usage de env.  
Je ne sais pas où c’est défini (POSIX ? ni la page man ni la page info ne donnent d’information là dessus), donc quand c’est du sh, je préfère mettre /bin/sh car je sais que c’est un standard.[/quote]

fais un man env[/quote]  
Très drôle.

---

<div class="post-metadata">

**Author:** ![ggoodluck47](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/g/c67d28/32.png) [@ggoodluck47](https://www.debian-fr.org/u/ggoodluck47)\
**Post date:** [Février 20, 2016, 10:15 UTC](https://www.debian-fr.org/t/comparaison-du-scripting-sous-differents-shell/26344/6 "2016-02-20T22:15:52Z")

</div>

Salut,

env n’est qu’un aiguillage vers le paramètre et donc pour les fanatiques de tel ou tel shell d’essayer de changer facilement 🙂

---

<div class="post-metadata">

**Author:** ![kna](https://www.debian-fr.org/user_avatar/www.debian-fr.org/kna/32/5623_2.png) [@kna](https://www.debian-fr.org/u/kna)\
**Post date:** [Février 20, 2016, 10:16 UTC](https://www.debian-fr.org/t/comparaison-du-scripting-sous-differents-shell/26344/7 "2016-02-20T22:16:05Z")

</div>

J’ai entendu dire que sous certains unixes, les shells n’étaient pas forcément dans le même dossier (/usr/bin/bash par exemple) et que donc en utilisant env, c’était plus portable (lui serait toujours dans /usr/bin). À confirmer…

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 10:16 UTC](https://www.debian-fr.org/t/comparaison-du-scripting-sous-differents-shell/26344/8 "2016-02-20T22:16:06Z")

</div>

Bon voila j’ai effectué des recherches supplémentaires et à partir d’aujourd’hui mes scripts utilisent env dans leur shaban. En effet la page manuel de env sous OpenBSD indique clairement que c’est une commande POSIX (du moins le fonctionnement par défaut et l’option -i).

[openbsd.org/cgi-bin/man.cgi? … &sektion=1](http://www.openbsd.org/cgi-bin/man.cgi?query=env&sektion=1)

Je vais tenter de voir pour améliorer la page man de Debian.

---

<div class="post-metadata">

**Author:** ![eol](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/e/b782af/32.png) [@eol](https://www.debian-fr.org/u/eol)\
**Post date:** [Février 20, 2016, 10:16 UTC](https://www.debian-fr.org/t/comparaison-du-scripting-sous-differents-shell/26344/9 "2016-02-20T22:16:39Z")

</div>

Debian propose aussi 9base, un paquet qui réunit :

- un shell, le rc shell

- toute une floppée d’utilitaires :`awk
basename
bc
cal
cat
cleanname
date
dc
du
echo
factor
fortune
freq
getflags
grep
hoc
ls
mk
mkdir
mtime
primes
rc
read
sed
seq
sleep
sort
tail
tee
test
touch
tr
troff
uniq
yacc`

- quelques bibliothèques :  
Plan 9 libc, libbio, libregexp, libfmt et libutf

l’ensemble comprenant le shell, les utilitaires et les bibliothèques est plus petit que bash tout seul.

La seule doc sur le rc shell que je connaisse est en anglais : [doc.cat-v.org/plan\_9/4th\_edition/papers/rc](http://doc.cat-v.org/plan_9/4th_edition/papers/rc)  
Dans le paquet debian, il manque peut-être 2 ou 3 utilitaires de cette liste, il seront présent lors de la prochaine version de 9base en Sid.

---

<div class="post-metadata">

**Author:** ![eol](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/e/b782af/32.png) [@eol](https://www.debian-fr.org/u/eol)\
**Post date:** [Février 20, 2016, 10:16 UTC](https://www.debian-fr.org/t/comparaison-du-scripting-sous-differents-shell/26344/10 "2016-02-20T22:16:39Z")

</div>

[quote=«&nbsp;MisterFreez&nbsp;»]Aucun appel à un programme extérieur, du zsh pur et dur. 😃 [/quote]Je ne connais pas zsh, mais ta remarque pose question.  
Zsh serait il au shell ce qu’emacs est à l’éditeur de texte ? ![:mrgreen:](https://www.debian-fr.org/uploads/default/original/1X/cc83e9b583138e48ff45f96609046b06d06c7f9d.gif "Mr. Green")

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 10:16 UTC](https://www.debian-fr.org/t/comparaison-du-scripting-sous-differents-shell/26344/11 "2016-02-20T22:16:42Z")

</div>

[quote=«&nbsp;eol&nbsp;»][quote=«&nbsp;MisterFreez&nbsp;»]Aucun appel à un programme extérieur, du zsh pur et dur. 😃 [/quote]Je ne connais pas zsh, mais ta remarque pose question.  
Zsh serait il au shell ce qu’emacs est à l’éditeur de texte ? ![:mrgreen:](https://www.debian-fr.org/uploads/default/original/1X/cc83e9b583138e48ff45f96609046b06d06c7f9d.gif "Mr. Green")[/quote]  
Exactement en mieux (parce que c’est pas du lisp). zsh intègre de bas eu module pour faire du FTP et un module pour faire du TCP (ainsi qu’un module curse).

ZSH c’est à la fois un shell interactif puissant et un langage de programmation puissant.
