В чем разница между "#!/ usr / bin / env bash "и"#!/ usr/bin / bash"?
в заголовке bash
script, в чем разница между этими двумя утверждениями ?
#!/usr/bin/env bash
#!/usr/bin/bash
когда я попытался увидеть env
man page, я получаю это определение:
env - run a program in a modified environment
что это значит?
4 ответов
выполнение команды через /usr/bin/env
имеет преимущество поиска любой версии программы по умолчанию в вашей текущей envайронменом.
таким образом, вам не нужно искать его в определенном месте в системе, так как эти пути могут быть в разных местах в разных системах. Пока он на твоем пути, он найдет его.
недостатком является то, что, поскольку вы не вызываете явный исполняемый файл, у него есть потенциал для ошибок, и о проблемах безопасности многопользовательских систем (если кому-то удалось получить их исполняемый файл под названием bash
на своем пути, например).
#!/usr/bin/env bash #lends you some flexibility on different systems
#!/usr/bin/bash #gives you explicit control on a given system of what executable is called
в некоторых ситуациях первый может быть предпочтительным (например, запуск скриптов python с несколькими версиями python, без необходимости переделывать исполняемую строку). Но в ситуациях, когда в центре внимания находится безопасность, последнее было бы предпочтительнее, поскольку оно ограничивает возможности ввода кода.
С помощью #!/usr/bin/env NAME
делает поиск оболочки для первого совпадения имени в переменной среды $PATH. Это может быть полезно, если вы не знаете абсолютного пути или не хотите его искать.
вместо явного определения пути к интерпретатору, как в /usr/bin/bash/
, используя команду env, интерпретатор ищется и запускается оттуда, где он впервые найден. Это имеет оба плюсы и минусы
Я нахожу это полезным, потому что, когда я не знал о env, прежде чем я начал писать сценарий, я делал это:
type nodejs > scriptname.js #or any other environment
и затем я модифицировал эту строку в файле в shebang.
Я делал это, потому что я не всегда помнил, где находится nodejs на моем компьютере -- / usr/ bin /или/ bin/, поэтому для меня env
очень полезно. Может быть, есть детали с этим, но это моя причина