## Python-скрипт как «команда» {#sec-e5db7dc8c348} `#!/usr/bin/env python3` Все знают, что при написании Python-скриптов в Linux можно добавить такую строку shebang в первую строку, не так ли? Однако многие, похоже, не утруждают себя добавлением shebang. Вероятно, они думают: «Разве это не просто избавляет от необходимости вводить команду `python3`? Я могу и сам напечатать это.» Если это просто «функция для сокращения набора текста», то, честно говоря, она не особо впечатляет. Но если сформулировать это так, ситуация меняется: > **«Техника маскировки моего кода на Python под нативную команду Linux»** Это звучит довольно заманчиво, не правда ли? ![процесс pipi с Python-скриптом в Linux](/media/whitedec/blog_img/3d9a3bd717534666b5e3ced5b2867e89.webp) --- ## Момент, когда Python-скрипт становится «инструментом» {#sec-6078e36b7072} Эта одна строка: ```python #!/usr/bin/env python3 ``` Если вы понимали это просто как «указание пути к Python», то до сих пор вы просто **выполняли код**. Но с того момента, как вы начинаете использовать это правильно, 👉 вы **добавляете новый инструмент в систему**. Разница намного больше, чем кажется. --- ## 1. Разрываем оковы расширения `.py` {#sec-789004867c8d} Мы по привычке пишем так: ```bash python3 crawler.py ``` Это похоже на следующее: > «Это файл Python… пожалуйста, запустите его с помощью Python…» Довольно пассивно, не так ли? Однако, если добавить shebang и дать права на выполнение командой `chmod +x`, расширение становится ненужным. ```bash ./crawler ``` Тон совершенно меняется. --- ### Фокус на функциональности, а не на языке {#sec-7518d1265207} ```bash crawler backup log-cleaner notify ``` Теперь вам становится неважно, являются ли эти файлы: - Python-скриптами - С-программами - Go-программами То есть, вы концентрируетесь на **функциональности самого скрипта**, а не на языке, на котором был реализован инструмент. Эта психологическая разница ощущается довольно сильно, если попробовать самому. Мой код больше не: - `script.py`, - а **одна из команд Linux**. Чувство, будто мой код стоит **рядом с `ls`, `grep`, `awk`**. Это первое удовольствие. --- ## 2. Естественно вписывается в конвейер {#sec-1ae280c7d5d4} Лично я считаю, что настоящая мощь Linux заключается в символе `|` (пайп). Среди бесчисленных преимуществ Linux, существование этого пайпа — просто великолепно. **Соединение команд 👉 для создания единого потока** Если бы этот прекрасный конвейер был создан из скриптов без shebang, это выглядело бы так: ```bash cat access.log | python3 parser.py | python3 filter.py ``` Что-то… поток прерывается. - «А, это Python» - «Опять интерпретатор» Постоянно отвлекает. Однако скрипт с shebang будет выглядеть так: ```bash cat access.log | parser | filter | notifier ``` Или ```sh ps aux | my-filter | sort | uniq ``` Разве ощущения не меняются? **Поток не прерывается** - Получаем ввод - Обрабатываем - Передаём дальше Кажется, что все естественно продолжается. > Немного преувеличивая, могу сказать, что чувствуешь себя не просто «Python-скриптом», а **фильтром, следующим философии Unix**. И кажется, что мой код переместился из мира Python в мир Linux. ## 3. Создаём свои команды Linux на Python легко и просто {#sec-7acaed130940} Конечно, для простой автоматизации в Linux первым делом на ум приходят Bash-скрипты. Они позволяют использовать системные команды, как свои собственные, без установки дополнительных пакетов (импорта). Но давайте будем честны с собой. Когда условия становятся сложнее и приходится работать со структурами данных, код на Bash быстро превращается в «нечитаемую головоломку», которую не хочется открывать потом. Разве вы не чувствовали разочарования, когда открывали код через несколько месяцев для обслуживания, хотя при написании он казался простым и понятным? Вот тут-то и проявляется истинная ценность Python. - **Победа читаемости:** То чувство облегчения, когда вы открываете файл для обслуживания через несколько месяцев. Python любезно объясняет, о чём я думал в прошлом. - **Мощная экосистема пакетов:** Сложные вызовы API или обработка данных завершаются всего за несколько строк благодаря продвинутым пакетам Python. Пока вы боретесь с Bash, на Python вы уже закончите реализацию и сможете пить кофе. В конечном итоге, стратегия такова: «логика создаётся с производительностью Python, а выполнение — с простотой нативных команд Linux». Удалите `.py`, дайте права на выполнение командой `chmod +x`, а затем незаметно поместите этот файл куда-нибудь в `PATH`. И наблюдайте, как ваш код работает, когда вы просто вводите одно слово в терминале, например, `deploy`. Вы испытаете странное чувство удовлетворения. Ведь вы не просто написали код, а создали свою собственную, новую команду, которая будет постоянно существовать в вашей системе. --- ## Заключение {#sec-6fad019925de} Shebang — это не просто мелкий синтаксис. ```bash #!/usr/bin/env python3 ``` Я бы сказал, что это не просто путь выполнения, а **декларация, изменяющая роль** скрипта на команду. Дорогие читатели, попробуйте добавить shebang в свой Python-код и ввести название своего кода прямо в терминале. Ощущение, которое вы почувствуете на кончиках пальцев, и есть суть этой техники. **Читайте также** - [Что означает первая строка в Linux-скрипте? Различия и использование #!/usr/bin/env bash и #!/bin/bash](/ko/whitedec/2025/12/12/linux-script-first-line-env-vs-bin-bash/)