Pages : 1
#1 Le 23/07/2018, à 18: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
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, à 18: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, à 19: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, à 20: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, à 20: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, à 20:32
- lynn
Re : Dash versus Bash
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, à 21:01
- Watael
Re : Dash versus Bash
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, à 21: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, à 21: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, à 04:13
- lynn
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.
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.
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, à 11:51
- Watael
Re : Dash versus Bash
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, à 14: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 le problème solutionné, 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, à 14:53
- Watael
Re : Dash versus Bash
ça va ralentir le démarrage !
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, à 15: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 le problème solutionné, 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, à 15: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
Pages : 1