В чем разница между этими двумя средами bash?

В чем разница между этими двумя средами bash?

Я заметил 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, поведение которой отличается от того, что ожидает скрипт.

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