Развивая темы предыдущих исследований-уроков начинающим от начинающих и опытных



пришла мысль такого следующего творческого задания:



Написать такую программу в файл, чтобы она этот файл и отобразила. То есть: показала саму себя в исходном виде (коде).



Ну и, как и прежде напоминаю: в приоритете ясность, понимаемость, наглядность, лёгкость восприятия. Это не гольф-кодинг и не соревнование на краткость! Но минимализм - получается как следствие, чтобы убрать лишнее в коде. Как говорится: чтобы «за деревьями увидеть лес».


Отступлю от своего предыдущего опыта и переключусь с классического Си на оболочку Борна:


#!/bin/bash
while read l; do echo $l; done < $0
# такая нехитрая программа


Трёхстрочник из:



  1. Ши-бенг сигнатура оболочки (в классике /bin/sh)

  2. Собственно интерпретируемый рабочий код - только из встроенных (builtin) команд bash: while..do..done, read, echo. Т.е. никаких внешних программ не просим. Получается цикл, где в условии одновременно с проверкой на возможность чтения из потока - в переменную l загоняется очередная строка этого самого потока. А он в свою очередь является переадресованным (<) вводом из самого файла со скриптом ($0). В теле цикла echo итеративно выводит на экран значение ($) переменной l.

  3. финальный, не исполняемый комментарий тоже начинается с решётки, но будет показан нашим конкретным скриптом при запуске («самопрезентации».


Ставим права и запускаем наш скрипт в файле selfie.sh:


chmod u+x selfie.sh
./selfie.sh


P.S.


Если меня не опередят: планирую написать нечто аналогичное на Си (как и в прошлый раз). Отображать и исходник, и бинарник. Но показывать читаемые символы (ASCII) исполнимого файла . То есть обложу себя условиями - никакого Unicode; исполнимый файл - с тем же именем, что и исходный, но без расширения (*.c).









 , , , ,






URL записи