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 23/07/2018, à 19:32

lynn

Dash versus Bash

Bonjour,

Selon la documentation sur les scripts.

L'exemple suivant:

cat script_dash
#!/bin/dash

tab=("John Smith" "Jane Doe")


for (( i=0; i < ${#tab[@]}; i++ )); do echo ${tab[i]}; done

retourne

./script_dash: 3: ./script_dash: Syntax error: "(" unexpected
Documentation a écrit :

Premiere méthode (compatible bash, zsh, et ksh93 mais pas ksh88, ni avec dash, qui est lancé par "sh")

Ma question est donc: Quelle est la syntaxe à utiliser pour que ce style de script fonctionne avec dash?

Merci pour vos lumières.


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#2 Le 23/07/2018, à 19:39

Watael

Re : Dash versus Bash

salut,

aucune, dash ne supporte pas les tableaux.


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

Hors ligne

#3 Le 23/07/2018, à 20:59

lynn

Re : Dash versus Bash

Dans ce cas, quel est l'intérêt d'avoir dash par défaut dans Ubuntu? Pourquoi ne pas mettre directement le pointeur sh sur bash ou zsh?


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#4 Le 23/07/2018, à 21:20

GammaDraconis

Re : Dash versus Bash

Nan c'est bash par défaut !

Mais dans ton script, tu as indiqué au début "#!/bin/dash" donc ce n'est pas un script bash mais dash.
Si tu veux faire des scripts, utilise plutôt bash sous Ubuntu.

Tu peux créer des tableaux sans problème avec bash.

Dernière modification par GammaDraconis (Le 23/07/2018, à 21:21)


Discussion sur mon script de post-install pour Ubuntu 20.04LTS : https://forum.ubuntu-fr.org/viewtopic.php?id=2026344
Lien direct script : https://github.com/simbd/Ubuntu_20.04LTS_PostInstall
Démo vidéo (peertube) : https://video.ploud.fr/videos/watch/fb7 … 0d252ed2db

Hors ligne

#5 Le 23/07/2018, à 21:32

lynn

Re : Dash versus Bash

GammaDraconis a écrit :

Nan c'est bash par défaut !

ls -l /bin/sh
lrwxrwxrwx 1 root root 4 juin  11 07:20 /bin/sh -> dash

«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#6 Le 23/07/2018, à 22:01

Watael

Re : Dash versus Bash

man bash a écrit :

BUGS
    It's too big and too slow.

c'est la raison d'être de dash, et la raison pour laquelle il est utilisé lors du démarrage.
et si il n'y a pas d'autre shell que dash installé lors de la création de l'utilisateur, il sera définit comme son $SHELL.


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

Hors ligne

#7 Le 23/07/2018, à 22:46

GammaDraconis

Re : Dash versus Bash

tu créer un script bash et ça fonctionnera très bien.
Oubie Dash. Bash est bien présent dans Ubuntu : ls -l /bin/bash

Dernière modification par GammaDraconis (Le 23/07/2018, à 22:47)


Discussion sur mon script de post-install pour Ubuntu 20.04LTS : https://forum.ubuntu-fr.org/viewtopic.php?id=2026344
Lien direct script : https://github.com/simbd/Ubuntu_20.04LTS_PostInstall
Démo vidéo (peertube) : https://video.ploud.fr/videos/watch/fb7 … 0d252ed2db

Hors ligne

#8 Le 24/07/2018, à 05:13

lynn

Re : Dash versus Bash

Watael a écrit :
man bash a écrit :

BUGS
    It's too big and too slow.

c'est la raison d'être de dash, et la raison pour laquelle il est utilisé lors du démarrage.
et si il n'y a pas d'autre shell que dash installé lors de la création de l'utilisateur, il sera définit comme son $SHELL.

Ce serait donc une question de performance... Dash est plus rapide mais moins complet que bash ou zsh..?!

@GammaDraconis
J'avais bien compris que ça fonctionnait avec bash. smile
Ma question en #3 n'était pas sur le fait d'utiliser dash ou bash mais sur le pourquoi /bin/sh pointe sur dash par défaut.


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#9 Le 24/07/2018, à 12:51

Watael

Re : Dash versus Bash

lynn a écrit :

Dash est plus rapide mais moins complet que bash ou zsh..?!

"Dash est plus rapide mais" propose moins de fonctionnalités.

"moins complet" par rapport à quoi ?
par rapport à la norme POSIX ? il en fait plus.
par rapport à bash ? en effet, il en fait moins !


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

Hors ligne

#10 Le 24/07/2018, à 15:21

erresse

Re : Dash versus Bash

Salut,
Je trouve comme lynn que ce lien est plutôt piégeux...
Si on conseille à quelqu'un de lancer son script par la commande "sh mon_script", comment s'exécutera-t-il ?
Il y a un risque que le script soit lancé par dash et qu'il se plante s'il a été conçu pour bash, par exemple (ce qui est le cas de la plupart des scripts récents).
Alors que s'il est lancé par "bash mon_script" ou simplement avec "./mon_script" il va fonctionner parfaitement.
Ce ne serait pas plus mal que ce lien "/bin/sh" pointe sur bash plutôt que dash, non ?


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#11 Le 24/07/2018, à 15:53

Watael

Re : Dash versus Bash

ça va ralentir le démarrage ! sad
comme je l'ai dit précédemment, dash a été choisi dans cet objectif  : accélérer le démarrage.


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

Hors ligne

#12 Le 24/07/2018, à 16:38

erresse

Re : Dash versus Bash

Je comprends bien l'intérêt d'accélérer le démarrage et donc, de recourir à dash au lieu de bash pour cette phase-là.
Toutefois, comme "sh" désigne le shell de façon générique, qu'on rencontre souvent dans les tutos et autres docs un suffixe ".sh" pour caractériser les scripts shell et que l'exécution d'un script est souvent indiquée avec "sh le_script.sh", c'est alors dash qui va lancer le script.
Même si on a bien pris la précaution de mettre un shebang avec "#!/bin/bash", c'est quand même dash qui est appelé par la commande "sh".
Il est dommage que le shebang ne soit alors pas pris en considération, comme c'est le cas lorsqu'on lance le script par "./le_script.sh", car du coup il ne va pas fonctionner sans qu'on comprenne trop pourquoi (du moins pour l'utilisateur non chevronné qui a peut-être téléchargé le script et tente juste de l'exécuter)...
C'est un peu comme le piège (dont j'ai eu l'occasion de profiter) du script écrit sous Windows et qui déconne en plein sous Linux, juste parce-que les fins de lignes ne sont pas marquées par LF mais par CR/LF... Pas forcément évident à déboguer de prime abord !


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

Hors ligne

#13 Le 24/07/2018, à 16:55

Watael

Re : Dash versus Bash

il y a pourtant longtemps, avant que j'ai écrit mon premier script déjà, qu'il est dit de ne pas lancer un script en le faisant précédé de sh, mais de le rendre exécutable (...), parce que soit le script sera exécuté par un shell strictement POSIX, soit parce que bash désactive ses fonctionnalités "avancées".


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

Hors ligne