Resumindo:
-
Existem vários shells que implementam um superconjunto de a especificação sh POSIX . Em sistemas diferentes,
/bin/shpode ser um link para ash, bash, dash, ksh, zsh, & c. (Ele sempre será compatível com sh - nunca csh ou peixe). -
Contanto que você use apenas
sh, você pode (e provavelmente deve) usar#!/bin/she o script deve funcionar bem, não importando qual seja a shell. -
Se você começar a usar recursos específicos do bash (por exemplo, arrays), deverá solicitar especificamente o bash - porque, mesmo que
/bin/shjá invoque o bash no seu sistema, talvez não todos os outros sistema, e seu script não será executado lá. (O mesmo se aplica a zsh e ksh.) Você pode usar o shellcheck para identificar os bashisms. -
Mesmo que o script seja apenas para uso pessoal, talvez você perceba que alguns sistemas operacionais alteram
/bin/shdurante as atualizações. no Debian costumava ser bash, mas depois foi substituído por um mínimo de traço. Scripts que usavam bashisms, mas tinham#!/bin/shde repente quebraram.
No entanto:
-
Mesmo
#!/bin/bashnão está muito correto. Em sistemas diferentes, o bash pode estar em/usr/binou/usr/pkg/binou/usr/local/bin. -
Uma opção mais confiável é
#!/usr/bin/env bash, que usa $ PATH. (Embora a ferramentaenvem si não seja estritamente garantida, o/usr/bin/envainda funciona em mais sistemas do que o/bin/bash).