Подпрограммы ОС для выполнения файла ищут два символа #!
в начале файла, и, если они присутствуют, вместо прямой загрузки файла в виде двоичного исполняемого файла, они вызывают исполняемый файл, на который ссылаются остальные эта строка вместе с любым аргументом командной строки, а затем исходный файл в качестве последнего аргумента.
Это довольно сложное описание; пара примеров поясняют это:
Если myFile
содержит:
#!/bin/echo My path is
... и мы делаем его исполняемым:
$ chmod +x myFile
... тогда, когда мы запустим его, мы получим:
$ ./myFile
My path is /home/slim/myFile
Или если мы изменим его содержимое на:
#!/bin/cat
Hello
world
Затем, когда мы запускаем его, он печатает сам ...
$ ./myFile
#!/bin/cat
Hello
world
Это обычно полезно, когда команда, которую она вызывает, является интерпретатором, который может работать с содержимым и сам игнорирует шебанг. Конечно, на многих языках #
обозначает комментарий, поэтому мы получаем его бесплатно:
#!/bin/bash
#!/usr/bin/perl
#!/bin/awk -f
Так что, по сути, он организует такие вещи, что прямой запуск myFile
эквивалентен запуску awk -f myFile
.