Já vi em vários lugares, incluindo recomendações neste site ( qual é o Bash shebang preferido? ), Para usar #!/usr/bin/env bash
preferencialmente #!/bin/bash
. Eu já vi um indivíduo empreendedor sugerir usando#!/bin/bash
estava errado e a funcionalidade do bash seria perdida ao fazer isso.
Tudo isso dito, eu uso o bash em um ambiente de teste rigidamente controlado, onde cada unidade em circulação é essencialmente um clone de uma única unidade mestre. Entendo o argumento da portabilidade, embora não seja necessariamente aplicável no meu caso. Existe algum outro motivo para preferir #!/usr/bin/env bash
as alternativas e, assumindo que a portabilidade era uma preocupação, existe algum motivo para usá-lo que poderia quebrar a funcionalidade?
env
pode não estar localizado em /usr/bin
. Comentários Shebang são completamente uma má idéia IMHO. Se o seu interpretador de script padrão não manipular comentários shebang, é apenas um comentário. No entanto, se você sabe que o intérprete de script pode lidar com comentários shebang e você conhece o caminho para o bash, não há razão para não invocá-lo usando seu caminho absoluto, a menos que o caminho seja muito longo (improvável) ou você possa portar o script para um sistema que não possui bash localizado em / bin. Por outro lado, as advertências que mencionei anteriormente se aplicam nesse caso, pois envolve portabilidade.
/etc
ou /bin/sh
. bash
é um complemento para a maioria dos sistemas similares ao Unix. É apenas o Linux onde bash
é garantido estar /bin
e provavelmente também está vinculado como /bin/sh
. Desde que o Linux se tornou o moderno Unix de fato para muitas pessoas, o fato de outros sistemas que não o Linux existirem foi esquecido. Na minha própria resposta abaixo, assumi o Linux porque você disse bash
. Muitas das caixas BSD com as quais trabalhei nem sequer a instalaram.
/bin/bash
. O Bash não está instalado por padrão. Se você quiser, você precisa pkg install bash
. Uma vez instalado, ele está localizado em /usr/local/bin/bash
. Não há nada instalado no /bin/bash
OpenBSD. Um shebang de #!/bin/bash
vontade de erro, e #!/usr/bin/env bash
terá sucesso.