ОС UNIX для филологического факультета

На этой странице приводятся Программа лекций и презентации по курсу «Операционная система UNIX» в таком варианте, как он читается на филологическом факультете ТГУ.

Задание для лабораторной работы

Требуется написать скрипт, совместимый с POSIX Shell, который производит сборку некоторого исходного файла. Таким файлом может быть как программа на языке C/C++, так и страница TeX. Скрипт должен:

  1. Возвращать информативный код ошибки (скажем, если исходный файл вообще невозможно откомпилировать).
  2. Анализировать текст и находить заготовленный комментарий с именем конечного файла. Комментарий должен быть некоторым ключевым словом, наиболее логично использовать, скажем, "Output:".
  3. Сборка должна производиться в временном каталоге, который должен быть создан при помощи утилиты mktemp.
  4. Каталог должен быть удалён при любом исходе работы скрипта, включая обработку сигналов, которые требует немедленного прекращения работы.
  5. Рядом с исходным файлом после завершения работы должен появиться конечный файл с именем, как в распознанном комментарии. Все попутные файлы компиляции должны быть удалены вместе со временным каталогом (что очевидно, потому что они не должны покидать пределы временного каталога).

Инструкция по сборке лабораторной работы при помощи Docker в Microsoft Windows

Лабораторную работу можно выполнять в Microsoft Windows при помощи Docker. Его дистрибутив можно найти по этой ссылке.

В качестве примера здесь можно найти программу для языка C с приложенным Dockerfile. Чтобы скомпилировать и запустить программу, нужно в папке с проектом выполнить две команды:

  1. docker build -t unix-lab .
  2. docker run unix-lab

В университетском Moodle доступен видеоролик, как это выполняется.

С помощью докера можно запускать bash-скрипты следующей командой:

docker run -it \–rm -v //d/path/to/script.sh:/script.sh bash:4.4 bash /script.sh
        

Где //d/path/to/script.sh - путь к баш-скрипту где-то на диске D. К сожалению, не нашёл официального контейнера для чистого shell, но bash ведь тоже подойдёт?