pinto_h: Papa di Roma (Default)
[personal profile] pinto_h
Дуже давно помітив якусь дивну хєрню у будь-яких скриптах для *nix, особливо якщо їх написано на perl, python чи ruby. Не читають йолопи вимоги стандарту і не тільки. Найпопулярніші зайві рухи це використовувати задля шебангу /usr/bin/env.

Запустіть інтерпретатори perl чи ruby з опцією --help і там побачите строку на кшталт:

-x[directory] ignore text before #!perl line (optionally cd to directory)

це означатиме, що якщо ви, наприклад у Windows ви створите batch-файл, де першими строками буде щось таке:

@echo off
perl -x %~f0 %*
goto :eof
#!perl

То запуститься cmd.exe, що запустить perl з флагом "-x" і по goto :eof закінчить виконання скрипту, а інтерпретатор perl текст, що призначений для cmd.exe, ігноруватиме до "#!perl". Аналогічно для ruby. З python трохи складніше, бо його інтерпретатор проігнорує лише першу строку, тому для cmd.exe перша строка:

@python -x %~f0 %* & goto :eof

А як же *nix? А стандарт треба читати. Якщо у скрипті немає шебангу "#!" то система запустить Єдиний та Неповторний Шел -- True One Shell, тобто /bin/sh. Це те, що нам і треба! Перша строка для python:

exec python -x "$0" ${1+"$@"}; exit # exit, якщо система не знайшла python.

Ну, шо? То як вам хєрня від бородатого гакера?

Profile

pinto_h: Papa di Roma (Default)
pinto_h

March 2026

S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 2425262728
293031    

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 25th, 2026 04:53 pm
Powered by Dreamwidth Studios