Мне бы хотелось узнать, является ли, по вашему мнению, хорошей практикой использование этой штуки:
#!/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
полезно только если скрипт будет использоваться на нескольких системах, где расположение двоичных файлов может различаться. Если скрипт используется только на одной системе или в однородной сети, то это не обязательно.