Je pensais que /bin/sh
c'était un lien symbolique vers ma coquille de choix. Je l'ai toujours utilisé bash
, alors j'ai supposé que /bin/sh
cela indiquerait /bin/bash
. Il s'avère, cependant, qu'il pointe /bin/dash
.
Ça devient plus drôle. Je commence dash
et fais echo $SHELL
et il s'imprime /bin/bash
(donc ils sont fondamentalement les mêmes?). Cependant, la page de manuel de dash
est complètement différente de la page de manuel de bash
(donc ce n'est pas la même chose?).
echo $SHELL
impression/bin/bash
est que cette variable est définie pour le shell par défaut qui démarre lorsque vous vous connectez plutôt que le shell actuel que vous exécutez. Démarrez ksh ou zsh à partir d'une invite Bash etecho $SHELL
dira toujours/bin/bash
. Utilisezps
pour voir ce qui est en cours d'exécution.Réponses:
Debian et Ubuntu sont passés à dash (iirc) en raison de plusieurs choses. Tout d'abord, Bash est devenu grand au fil des ans. En fait, le
/bin/bash
binaire de mon système Ubuntu 8.04 est presque dix fois (!) Aussi gros que/bin/dash
. Maintenant, cela n'a pas beaucoup d'importance pour l'utilisation quotidienne du shell, mais cela a de l'importance dans les situations suivantes:L'inconvénient d'utiliser Dash au lieu de Bash pour l'écriture de scripts, c'est que beaucoup de gens utilisent des subtilités syntaxiques que seul Bash possède, les soi-disant Bashismes . Des exemples de bashismes sont des sous-chaînes, comme ceci:
Et ça:
Dash, d'autre part vise principalement à être conforme à POSIX (et pas plus que cela), vous donnera une erreur de mauvaise sous-station si vous essayez ceci:
Cela importera si vous utilisez
/bin/sh
(et doncdash
) comme interprète pour vos scripts shells et utilisez des bashismes dans ceux-ci. Debian et Ubuntu ont de belles pages wiki sur les bashismes et pourquoi ils sont mauvais dans les scripts shell en général et les scripts init en particulier. Par conséquent, vous devez consciemment choisir si vous avez besoin/bin/sh
ou/bin/bash
comme interprète pour votre script.Dash n'est pas censé être utilisé comme shell par défaut sur vos systèmes. Utilisez simplement Bash pour cela. Pour la portabilité de vos scripts, vous pouvez utiliser Dash comme interprète pour augmenter les chances que les scripts s'exécutent sur d'autres versions Linux et Unix.
la source
/bin/bash
; de nombreux systèmes non Linux ont de véritablessh
shells qui ne sont même pas compatibles avecbash
.echo ${a#123}
n'est pas un bashisme, il fait partie de la spécification d'extension POSIX Parameter. pubs.opengroup.org/onlinepubs/009695399/utilities/… Vous n'obtenez tout simplement pas les styles Bash les plus avancés, les posix sont de style sous-chaîne + caractères d'extension simples. Signification, POSIX permet égalementecho ${a#*6}
Jetez un œil ici: https://wiki.ubuntu.com/DashAsBinSh peut-être que cela vous aidera.
la source
dash est un remplacement bash léger, en supposant que vous utilisez ubuntu qui a changé il y a quelques années.
Ce n'est pas trop bon cependant, à mon humble avis. http://forums.debian.net/viewtopic.php?f=20&t=45116
la source
Comme tous les shells ne sont pas définis
$SHELL
lors de l'exécution, vous découvrez votre shell actuel avec:S'il donne une erreur, c'est csh, sinon c'est le
argv[0]
avec lequel vous avez été invoqué, qui est généralement le shell, peut-être avec un-
trait d'union, pour indiquer qu'il s'agit d'un shell de connexion.Ce n'est pas garanti , car il
argv[0]
est sous le contrôle du processus d'appel, mais c'est en pratique l'approche la plus fiable.la source