Кіріспе

Компьютерлік техникада "#!" символы қолданылады. Компьютерлік техникада шебанг – бұл нөмір белгісі (#) мен сұрақ белгісінен (!) тұратын символдар тізбегі. Оны "шарп экскламейшн", "ша банг", "хашбанг", "паунд банг" немесе "хаш плинг" деп те атайды. Егер шебангы бар мәтін файлы Unix сияқты операциялық жүйеде орындалатын файл ретінде пайдаланылса, бағдарлама жүктеу механизмі файлдың бастапқы жолының қалған бөлігін интерпретатор нұсқауы ретінде талдайды. Жүктеуші көрсетілген интерпретатор бағдарламасын іске қосады, оған скриптті іске қосуға тырысқанда бастапқыда қолданылған жолды аргумент ретінде жібереді, соның арқасында бағдарлама файлды деректер кірісі ретінде пайдалана алады. Мысалы, егер скрипт path/to/script жолымен аталса және #!/bin/sh жолынан басталатын болса, онда бағдарлама жүктеушіге /bin/sh бағдарламасын іске қосуға нұсқау беріледі, ал path/to/script бірінші аргумент ретінде беріледі. Интерпретатор әдетте шебанг жолын елемейді, себебі "#" символы көптеген скрипт тілдерінде түсініктеме белгісі болып табылады; кейбір тілдердің интерпретаторлары түсініктемелерді бастау үшін шарп белгісін қолданбаса да, оның мақсатын ескере отырып, шебанг жолын елеуі мүмкін.

Жақсы жақтары

Файл кеңейтулері мен оларды ашуға арналған бағдарламалар арасындағы жаһандық тізімдерді пайдаланумен салыстырғанда, интерпретатор директивасы әдісі пайдаланушыларға жаһандық жүйе деңгейінде белгілі емес және әкімшілік құқықтары қажет емес интерпретаторларды қолдануға мүмкіндік береді. Бұл сондай-ақ, файл кеңейтуінің атау кеңістігін артық жүктеместен (бір файл кеңейтуі бірнеше файл түрін білдіргенде) нақты интерпретаторды таңдауға және басқа бағдарламалардың шақыру синтаксисін өзгертпей, скрипт іске асыру тілін өзгертуге мүмкіндік береді. Скриптті шақырушыларға оның іске асыру тілін білу қажет емес, өйткені скрипт өзі қолданылатын интерпретаторды көрсетуге жауапты.

Сиқырлы сан

Шебанг – бұл орындалатын файлдағы сиқырлы санның адам оқи алатын мысалы, ал сиқырлы байт тізбегі – бұл ASCII кодировкасында екі таңбалы түрде жазылған . Бұл сиқырлы санды "exec" функцияларының тобы анықтайды, олар файлдың скрипт немесе орындалатын бинарлық файл екенін білдіреді. Шебангтың болуы көрсетілген орындалатын файлдың іске қосылуына себеп болады, әдетте бұл скрипт тіліне арналған интерпретатор болады. Кейбір ескі Unix нұсқаларында шебангтан кейін бос орын мен қисық сызық / болуы керек деген пікір бар, бірақ бұл рас емес сияқты.

Этимология

Интерпретатор директивасымен басталатын орындалатын файл жай ғана скрипт деп аталады, көбінесе ол қолданылатын интерпретатордың атауымен немесе жалпы түрімен беріледі. Ерекше екі таңбасы үшін "shebang" атауы, "SHArp bang" немесе "haSH bang" сөздерінің шамалы қысқартылуынан туындаған болуы мүмкін, олар Unix жүйесіндегі осы белгілердің екі кең таралған атауын көрсетеді. "Shebang" сөзіндегі "sh" әрпінің шығу тегі туралы тағы бір теория, оның әдетте shebang арқылы шақырылатын "sh" қабықшасынан (shell) алынғанымен байланысты. Бұл қолданыс 1989 жылдың желтоқсанында және, мүмкін, одан да ертерек пайда болған.

Тарих

Шебангты Деннис Ричи Bell Laboratories-те 7-ші және 8-ші басылымдар арасында енгізді. Ол сондай-ақ Берклидің Компьютерлік ғылым зерттеулерінен шыққан BSD нұсқаларына да қосылды (2.8BSD-де болды және 4.2BSD-де әдепкі бойынша іске қосылды). AT&T Bell Laboratories Edition 8 Unix және одан кейінгі нұсқалары көпшілікке жарияланбағандықтан, бұл мүмкіндіктің алғашқы кеңінен танымал болған түрі BSD-де пайда болды. 1979 жылғы Unix 7-ші нұсқасының құжаттамасында интерпретатор директивасының болмауы, бірақ қабықша скрипттерін қолдау нақты көрінеді. Онда Bourne қабықшасының мүмкіндігі сипатталған, онда орындауға рұқсаты бар файлдар қабықшамен арнайы өңделеді. Қабықша (кейде скрипттегі бастапқы таңбаларға байланысты, мысалы ":" немесе "#") файлдағы командаларды түсіндіріп, орындау үшін қосалқы қабықшаны іске қосады. Осы модельде скрипттер тек Bourne қабықшасы ішінде шақырылғанда ғана басқа командалар сияқты жұмыс істейді. Операциялық жүйенің өзінің exec жүйелік шақыруы арқылы мұндай файлды тікелей орындауға тырысу сәтсіз аяқталады, бұл скрипттердің жүйелік командалар сияқты біркелкі жұмыс істеуіне бөгет жасайды.