Поиск

Хитрый шебанг


Вот только сейчас узнал, что башу можно скормить не только классический шебанг, начинающийся с «#!», но и вообще без шебанга исполнять файлы! На SO подсказывают, что любой текст с исходником на С/С++ можно «сделать интерпретируемым» при помощи простой конструкции:

//usr/bin/gcc "$0" && exec ./a.out "$@"
#include <stdio.h>
int main(){ printf("hello!\n"); return 0;
}

Можно даже более сложные вещи делать при помощи #if0!
Здесь вся суть кроется в том, что баш начинает исполнять файл строка за строкой даже без стандартного шебанга &#35!/bin/sh. Если мы пишем //bin/ls, то лишний слэш игнорируется (попробуйте запустить //bin/ls в консоли). А gcc два слэша подряд рассматривает как комментарий!
Аналогично с #if0: и gcc, и баш рассматривают это как комментарий, но, в отличие от gcc, все, что идет дальше (до #endif) баш интерпретирует!
Занятно. eddy_em.livejournal.com

Добавить комментарий