Я бачив в ряді місць, в тому числі рекомендації на цьому сайті ( Що переважне Bash притон? ), Щоб використовувати #!/usr/bin/env bashв перевазі #!/bin/bash. Я навіть бачив, як один заповзятливий чоловік припускає, що використання #!/bin/bashбуло неправильним, і функція bash була б втрачена тим самим.
Все, що сказано, я використовую bash у жорстко контрольованому тестовому середовищі, де кожен привід в обігу по суті є клоном одного головного приводу. Я розумію аргумент переносимості, хоча це не обов'язково застосовується в моєму випадку. Чи є якась інша причина віддавати перевагу #!/usr/bin/env bashальтернативам, і, якщо припустити, що портативність викликає занепокоєння, чи є якась причина, коли її використання може порушити функціональність?
envможе не розміщуватися на /usr/bin. Коментарі Shebang - це взагалі погана ідея IMHO. Якщо ваш інтерпретатор сценаріїв за замовчуванням не обробляє коментарі shebang, це лише коментар. Однак, якщо ви знаєте, що інтерпретатор скриптів може обробляти коментарі shebang, і ви знаєте шлях до баш, немає ніяких причин не викликати його, використовуючи його абсолютний шлях, якщо шлях занадто довгий (малоймовірний), або, можливо, ви зможете перенести скрипт до системи, яка не має bash, розташований у / bin. Знову ж таки, застереження, про які я згадував раніше, застосовуються в тому випадку, оскільки це передбачає переносимість.
/etcабо /bin/sh. bashє доповненням для більшості подібних систем Unix. Є лише Linux, де bashгарантовано є, /binі, швидше за все, також пов'язаний як /bin/sh. З тих пір, як Linux став сучасним Unix для багатьох людей, той факт, що можуть існувати інші системи, крім Linux, був забутий. У власній відповіді нижче я припустив Linux, тому що ви сказали bash. У багатьох BSD коробках, з якими я працював, навіть не було встановлено.
/bin/bash. Bash не встановлений за замовчуванням. Якщо ви цього хочете, ви повинні pkg install bash. Після встановлення він знаходиться за адресою /usr/local/bin/bash. На /bin/bashOpenBSD нічого не встановлено . Шебанг #!/bin/bashволі помилиться, і #!/usr/bin/env bashце вдасться.