Има ли някакъв Bash
, който да е обективно по-добър от останалите за повечето приложения?
#!/usr/bin/env bash
#!/bin/bash
#!/bin/sh
#!/bin/sh -
Смътно си спомням, че преди време бях чувал, че добавянето на тире в края не позволява на някой да подаде команда към вашия скрипт, но не мога да намеря подробности за това.
Трябва да използвате #!/usr/bin/env bash
за преносимост: различните *никси поставят bash
на различни места и използването на /usr/bin/env
е заобиколен вариант за стартиране на първия bash
, намерен в PATH
. И sh
не е bash
.
Обикновено /bin/sh
е връзка към системния шел по подразбиране, който често е bash
, но например в системите Debian е по-лекият dash
. Така или иначе, оригиналният шел на Bourne е sh
, така че ако вашият скрипт използва някои специфични за bash
(второ поколение, "Bourne Again sh") функции ([[ ]]
тестове, масиви, различни сладки неща и т.н.), тогава трябва да сте по-конкретни и да използвате по-късния. По този начин на системи, на които не е инсталиран bash, вашият скрипт няма да се изпълни. Разбирам, че може да има вълнуваща трилогия от филми за тази еволюция... но това може да е слух.
Също така имайте предвид, че когато е извикан като sh
, bash
до известна степен се държи като POSIX стандарт sh
(вижте също документите на GNU за това).
Това наистина зависи от начина, по който пишете скриптовете си в bash. Ако вашият /bin/sh
е симлинкнат към bash, когато bash се извиква като sh
, някои функции не са достъпни.
Ако искате специфични за bash, не-POSIX функции, използвайте #!/bin/bash