Чтобы добавить больше информации к хорошему ответу @ Mohit:
Unix использует много переводчиков для многих языков. Некоторые из них называются «оболочками», но большинство - это просто еще один компьютерный язык для системы. Фактически, каждый файл написан на каком-то языке, даже если это скомпилированная сборка байт-кодов Java.
Первые несколько байтов файла являются «волшебными»: они сообщают ОС, как выполнить файл. Если первые два байта равны '#!', ОС знает, что файл нуждается в интерпретаторе. Остальная часть первой строки до новой строки затем используется как команда для выполнения. Первое «слово» (разделенная пробелами группа не-пробелов) строки интерпретируется как абсолютное имя файла для запуска, а все остальные слова передаются ему в качестве аргументов командной строки. Последний параметр - это имя файла, который вы запускаете.
Так, например, если у вас есть первая строка как
#!/bin/tclsh
в файле /home/user/aaa.tcl
ОС выполнит / bin / tclsh с /home/user/aaa.tcl в качестве аргумента командной строки:
/bin/tclsh /home/user/aaa.tcl
Для более продвинутого примера попробуйте это:
#! /bin/env perl
в / home / user / myperlscript
Выполняется следующая команда:
/bin/env perl /home/user/myperlscript
/ bin / env - это служебная программа, которая ищет свой первый аргумент с помощью переменной среды PATH, а затем выполняет найденную программу, передавая остальные аргументы программе. С помощью env вы можете использовать PATH для поиска переводчиков.