История изменений
Исправление
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 и другие оболочки, надеялся на то, что кто-то напишет такой интерпретатор С-кода, который в принципе можно будет даже не компилировать. Поэтому не используйте расширения, да и всё. =)