Использование /usr/bin/env в качестве Sha-bang

Использование /usr/bin/env в качестве Sha-bang

Мне бы хотелось узнать, является ли, по вашему мнению, хорошей практикой использование этой штуки:

#!/usr/bin/env bash

вместо

#!/bin/bash

Эта статьякажется, выступает за использование, /usr/bin/envно когда я его использую, возникает скептицизм.

Каково твое мнение?

решение1

На практике, #!/usr/bin/envявляется переносимым почти на любую систему, которая понимает #!. Это полезная идиома для вызова программы, которая может находиться где угодно в $PATH. Если вы жестко закодируете путь к интерпретатору, ваш скрипт может не работать, если вы скопируете его на другую машину.

Моя общая политика заключается в использовании #!/bin/shтолько тех скриптов, которые используют переносимые shфункции (т. е. только функции POSIX, если меня интересуют только современные Unix-системы, и только функции Bourne, если меня интересуют старые системы, такие как старые версии Solaris) и #!/usr/bin/envт. д.

Недостатком #!/usr/bin/envявляется то, что он не позволяет передавать какие-либо параметры интерпретатору. С некоторыми интерпретаторами это можно обойти, указав параметры как директивы или сделав вторую строку двуязычным фрагментом, который вызывает интерпретатор при выполнении sh и ничего не делает при выполнении целевым интерпретатором. Естьобщая идиома perl, например (полезно для передачи -T).

решение2

envполезно только если скрипт будет использоваться на нескольких системах, где расположение двоичных файлов может различаться. Если скрипт используется только на одной системе или в однородной сети, то это не обязательно.

Связанный контент