# О шебангах в скриптах Linux Все скрипты, которые создаёт пользователь, исполняемыми не являются. Для того чтобы дать право исполнения определённому файлу, нужно выполнить: ```bash chmod +x $FILE ``` Где `$FILE` - имя файла Конечно, скрипт можно запустить и без права исполнения, для этого нужно запустить его в определённом интерпретаторе (bash, perl, python, et cetera): ```bash bash $FILE ``` Или ```python python $FILE ``` Но это не очень удобно, да и замедляет пользователя. А как быть, если скрипт нужно поместить, скажем, в `/usr/bin` или в любом другом каталоге из переменной `PATH`? Например, пакетный менеджер `slackpkg` из состава Slackware Linux или `urpmi` из Mandriva/Rosa/Mageia - те же самые скрипты на Bash и Perl соответственно. Поэтому, лучшим решением будет вставка определёной строки с указанием нужного интерпретатора. Эта строка называется _sha-bang_ (_шебанг_). И потом сделать скрипт исполняемым. Например, для Bash-скриптов шебанг выглядит так: ```bash #!/bin/bash ``` Или так: ```bash #!/bin/env bash ``` `env` - UNIX-утилита, позволяющая модифицировать список переменных окружения перед исполнением пользовательской команды с изменением окружения. Но также эту команду используют и для улучшения переносимости скриптов, так как в разных дистрибутивах нужные интерпретаторы могут находиться в разных местах, а вот путь к `env` одинаковый везде. Например, в одних дистрибутивах путь к bash `/bin/bash`, а в других: `/usr/bin/bash`. И при компиляции этого интерпретатора он ставится именно в `/usr`, а уже позже его можно перенести в `/bin` (что и реализовано в этом руководстве, поэтому в вашем дистрибутиве путь классический: `/bin/bash`). А, например, во FreeBSD `bash` находится по пути `/usr/local/bin/bash`, поэтому использование `env` будет таким: ```bash #!/usr/bin/env bash ``` Но тут ещё одна загвоздка: иногда различаются ещё и имена интерпретаторов. Например, Python3 в системе Windows (через MinGW, например) называется `python`, а не `python3`, как, например, в Linux. Поэтому, перед созданием скриптов (или при переноса таковых из Linux for yourself в другие системы) будьте внимательны в правильности шебанга. А лучше, проверьте его или тестовым скриптом (самый простейший "Hello, world!"), либо же воспользуйтесь утилитой `which` (или её аналогом), для того чтобы узнать нахождение нужного интерпретатора.