LINUX.ORG.RU

История изменений

Исправление Moisha_Liberman, (текущая версия) :

Ваш шебанг не будет работать внутри файла с расширением отличным от ‘c’,‘i’,"

Файл может быть без расширения вовсе, я же там написал прямо – (скрипт находится в файле test). Будет работать. Собственно, проверяется это легко – я не зря там вообще втупую тот же скрипт из самого себя и дёргаю вот так вот нагло – execve("./test", NULL, NULL); /* And this */.

Тут всё связано с общей семантикой решения – считается что код на С является скомпилированным в некий бинарь безо всяких расширений имён файла типа как в DOS/Windows – exe,cmd,bat или ещё что. Просто С-код, который спросто компилирован и исполняется. Не думаю что кто-то, когда создавали bash и другие оболочки, надеялся на то, что кто-то напишет такой интерпретатор С-кода, который в принципе можно будет даже не компилировать. Поэтому не используйте расширения, да и всё. =)

P.S. Теста ради добавил файл t.sh с содержимым:

#!/bin/bash
echo "hi-hi"

И стал вызывать его аналогично – execve("./t.sh", NULL, NULL);. Теперь это скриптовый tcc над нами с Вами ещё и хихикает, гад такой. =)))

Исходная версия Moisha_Liberman, :

Эт почему?!?

Ваш шебанг не будет работать внутри файла с расширением отличным от ‘c’,‘i’,"

Файл может быть без расширения вовсе, я же там написал прямо – (скрипт находится в файле test). Будет работать. Собственно, проверяется это легко – я не зря там вообще втупую тот же скрипт из самого себя и дёргаю вот так вот нагло – execve("./test", NULL, NULL); /* And this */.

Тут всё связано с общей семантикой решения – считается что код на С является скомпилированным в некий бинарь безо всяких расширений имён файла типа как в DOS/Windows – exe,cmd,bat или ещё что. Просто С-код, который спросто компилирован и исполняется. Не думаю что кто-то, когда создавали bash и другие оболочки, надеялся на то, что кто-то напишет такой интерпретатор С-кода, который в принципе можно будет даже не компилировать. Поэтому не используйте расширения, да и всё. =)