2

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

#!/usr/bin/env bash

вместо

#!/bin/bash

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

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

2 ответа2

2

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

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

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

1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .