Я видел в нескольких местах, в том числе рекомендации на этом сайте ( что является предпочтительным Bash Shebang? ), Чтобы использовать #!/usr/bin/env bash
в предпочтении #!/bin/bash
. Я даже видел, как один предприимчивый человек предположил, что использование #!/bin/bash
было неправильным, и функциональность bash была бы потеряна при этом.
Все это говорит о том, что я использую bash в жестко контролируемой тестовой среде, где каждый циркулирующий диск по сути является клоном одного главного диска. Я понимаю аргумент переносимости, хотя он не обязательно применим в моем случае. Есть ли какая-либо другая причина отдавать предпочтение #!/usr/bin/env bash
альтернативам, и, принимая во внимание переносимость, есть ли какая-либо причина, по которой она может нарушить функциональность?
env
может не находиться по адресу /usr/bin
. Комментарии Шебанга вообще плохая идея ИМХО. Если ваш интерпретатор сценариев по умолчанию не обрабатывает комментарии shebang, это просто комментарий. Однако, если вы знаете, что интерпретатор сценариев может обрабатывать комментарии shebang, и вы знаете путь к bash, нет причин не вызывать его, используя его абсолютный путь, если путь не слишком длинный (маловероятный) или вы, возможно, портируете скрипт в систему, в которой bash не находится в / bin. С другой стороны, оговорки, о которых я упоминал ранее, применимы в этом случае, поскольку они связаны с переносимостью.
/etc
или /bin/sh
. bash
является надстройкой для большинства Unix-подобных систем. Это только Linux, где bash
он гарантированно включен /bin
и, скорее всего, также связан как /bin/sh
. Поскольку Linux для многих стал де-факто современным Unix, тот факт, что системы, отличные от Linux, могут существовать, был забыт. В моем собственном ответе ниже я принял Linux, потому что вы сказали bash
. У многих коробок BSD, с которыми я работал, даже не было установлено.
/bin/bash
. Bash не устанавливается по умолчанию. Если вы хотите этого, вы должны pkg install bash
. После установки он находится по адресу /usr/local/bin/bash
. На /bin/bash
OpenBSD ничего не установлено . Шебанг #!/bin/bash
воли будет ошибкой и #!/usr/bin/env bash
будет успешным.