March 10th, 2020

Костерок

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

Вот только сейчас узнал, что башу можно скормить не только классический шебанг, начинающийся с "#!", но и вообще без шебанга исполнять файлы! На SO подсказывают, что любой текст с исходником на С/С++ можно "сделать интерпретируемым" при помощи простой конструкции:
//usr/bin/gcc "$0" && exec ./a.out "$@"
#include <stdio.h>
int main(){
    printf("hello!\n");
    return 0;
}

Можно даже более сложные вещи делать при помощи #if0!
Здесь вся суть кроется в том, что баш начинает исполнять файл строка за строкой даже без стандартного шебанга #!/bin/sh. Если мы пишем //bin/ls, то лишний слэш игнорируется (попробуйте запустить //bin/ls в консоли). А gcc два слэша подряд рассматривает как комментарий!
Аналогично с #if0: и gcc, и баш рассматривают это как комментарий, но, в отличие от gcc, все, что идет дальше (до #endif) баш интерпретирует!
Занятно.
promo eddy_em september 3, 12:13 8
Buy for 10 tokens
Уже больше полугода занимаюсь разработкой, вот, наконец-то в мастерских взялись за меня и начали выдавать первые детали. Сегодня сделал тестовую сборку (как обычно, местами пришлось "доработать напильником"): Пока прибор без названия (да и как-то не лезет в голову ничего, у меня нет…