|
|
||
|---|---|---|
| .. | ||
| testdata | ||
| .sync | ||
| README.md | ||
| env_reader.go | ||
| env_reader_test.go | ||
| executor.go | ||
| executor_test.go | ||
| go.mod | ||
| main.go | ||
| test.sh | ||
README.md
Домашнее задание №8 «Утилита envdir»
Необходимо реализовать утилиту envdir на Go.
Эта утилита позволяет запускать программы, получая переменные окружения из определенной директории:
- если директория содержит файл с именем
S, первой строкой которого являетсяT, тоenvdirудаляет переменную среды с именемS, если таковая существует, а затем добавляет переменную среды с именемSи значениемT; - имя
Sне должно содержать=; пробелы и табуляция в концеTудаляются; терминальные нули (0x00) заменяются на перевод строки (\n); - если файл полностью пустой (длина - 0 байт), то
envdirудаляет переменную окружения с именемS.
Пример использования:
$ go-envdir /path/to/env/dir command arg1 arg2
Если в директории /path/to/env/dir содержатся файлы:
FOOс содержимым123;BARс содержимымvalue,
то вызов выше эквивалентен вызову
$ FOO=123 BAR=value command arg1 arg2
Также необходимо, чтобы:
- стандартные потоки ввода/вывода/ошибок пробрасывались в вызываемую программу;
- код выхода утилиты совпадал с кодом выхода программы.
При необходимости можно выделять дополнительные функции / ошибки.
Юнит-тесты могут использовать файлы из testdata или создавать свои директории / файлы,
которые обязаны подчищать после своего выполнения.
Критерии оценки
- Пайплайн зелёный - 4 балла
- Добавлены юнит-тесты - до 4 баллов
- Понятность и чистота кода - до 2 баллов
Зачёт от 7 баллов
Подсказки
- https://www.unix.com/man-page/debian/8/envdir/
os.Argsioutil.ReadDirbytes.Replace,strings.TrimRightexec.Command