Я заметил bash
, что в сценариях некоторые люди используют другой
притонк тому, который я привык ставить на первое место среди своих собственных.
Может кто-нибудь объяснить разницу между этими двумя вариантами? Я #!/bin/bash
всегда использую один.
#!/bin/bash
#!/usr/bin/env bash
решение1
Результаты #!/usr/bin/env bash
в скрипте используют тот bash, который найден первым в $PATH
.
Хотя bash обычно располагается в /bin/bash
. Бывают случаи, когда это не так (разные операционные системы). Другое потенциальное использование — когда установлено несколько оболочек bash (более новая версия в альтернативном месте, например /usr/local/bin/bash
).
Doing #!/usr/bin/env bash
просто использует поведение утилиты env
.
Утилита env
обычно используется для манипулирования средой при вызове программы (например, env -i someprog
для очистки среды). Однако, не предоставляя никаких аргументов, кроме программы для выполнения, она приводит к выполнению указанной программы, как указано в $PATH
.
Обратите внимание, что в этом есть как преимущества, так и недостатки.
Преимущества, как уже упоминалось ранее, заключаются в том, что скрипт становится переносимым, если bash установлен в другом месте или если /bin/bash
он слишком устарел, чтобы поддерживать действия, которые пытается выполнить скрипт.
Недостатком является то, что вы можете получить непредсказуемое поведение. Поскольку вы находитесь во власти пользователя $PATH
, это может привести к тому, что скрипт будет запущен с версией bash, поведение которой отличается от того, что ожидает скрипт.