Емельянов Эдуард Владимирович (eddy_em) wrote,
Емельянов Эдуард Владимирович
eddy_em

Category:

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

Вот только сейчас узнал, что башу можно скормить не только классический шебанг, начинающийся с "#!", но и вообще без шебанга исполнять файлы! На 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) баш интерпретирует!
Занятно.
Tags: c, всячина
Subscribe

  • А что, в С так нельзя?

    Пытаюсь передать в функцию цвет как массив. Функция такая: void Pattern_draw3(Img3 *img, Pattern *p, int xul, int yul, uint8_t colr[3]); И…

  • Ардуиноподход

    Вот как ни гляну, большинство народу для считывания данных калибровки в BMP/BME280 использует типичный ардуиноподход, как, например, здесь: зачем-то…

  • Темы-2

    Некоторые испугались, прочитав предыдущие темы. Повторяю: темы для работы в течение всей школы (три года). А вот — их части, которые можно осилить за…

promo eddy_em august 17, 2019 12:33 3
Buy for 10 tokens
Юра намедни напечатал корпус для хронометра. Для первого блина получилось неплохо: И еще немного фотографий:
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

  • 5 comments