Развивая темы предыдущих исследований-уроков начинающим от начинающих и опытных
пришла мысль такого следующего творческого задания:
Написать такую программу в файл, чтобы она этот файл и отобразила. То есть: показала саму себя в исходном виде (коде).
Ну и, как и прежде напоминаю: в приоритете ясность, понимаемость, наглядность, лёгкость восприятия. Это не гольф-кодинг и не соревнование на краткость! Но минимализм - получается как следствие, чтобы убрать лишнее в коде. Как говорится: чтобы «за деревьями увидеть лес».
Отступлю от своего предыдущего опыта и переключусь с классического Си на оболочку Борна:
#!/bin/bash
while read l; do echo $l; done < $0
# такая нехитрая программа
Трёхстрочник из:
- Ши-бенг сигнатура оболочки (в классике
/bin/sh
) - Собственно интерпретируемый рабочий код - только из встроенных (builtin) команд bash: while..do..done, read, echo. Т.е. никаких внешних программ не просим. Получается цикл, где в условии одновременно с проверкой на возможность чтения из потока - в переменную
l
загоняется очередная строка этого самого потока. А он в свою очередь является переадресованным (<
) вводом из самого файла со скриптом ($0
). В теле цикла echo итеративно выводит на экран значение ($
) переменнойl
. - финальный, не исполняемый комментарий тоже начинается с решётки, но будет показан нашим конкретным скриптом при запуске («самопрезентации»).
Ставим права и запускаем наш скрипт в файле selfie.sh
:
chmod u+x selfie.sh
./selfie.sh
P.S.
Если меня не опередят: планирую написать нечто аналогичное на Си (как и в прошлый раз). Отображать и исходник, и бинарник. Но показывать читаемые символы (ASCII) исполнимого файла . То есть обложу себя условиями - никакого Unicode; исполнимый файл - с тем же именем, что и исходный, но без расширения (*.c).