Files
md2gost/md2gost.sh
T

71 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
IMAGE="md2gost"
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
usage() {
echo "Использование: md2gost file.md [-o dir]"
echo " file.md - исходный Markdown-файл"
echo " -o dir - выходная директория (по умолчанию .)"
exit 1
}
# Парсим аргументы
INPUT_FILE=""
OUTPUT_DIR="."
while [[ $# -gt 0 ]]; do
case "$1" in
-o)
OUTPUT_DIR="${2:-}"
[[ -z "$OUTPUT_DIR" ]] && usage
shift 2
;;
-h|--help)
usage
;;
-*)
echo "неизвестный флаг: $1" >&2
usage
;;
*)
INPUT_FILE="$1"
shift
;;
esac
done
[[ -z "$INPUT_FILE" ]] && usage
# Проверяем входной файл
if [[ ! -f "$INPUT_FILE" ]]; then
echo "ошибка: $INPUT_FILE не найден" >&2
exit 1
fi
# Абсолютные пути
INPUT_ABS="$(realpath "$INPUT_FILE")"
OUTPUT_ABS="$(realpath -m "$OUTPUT_DIR")"
mkdir -p "$OUTPUT_ABS"
INPUT_BASE="$(basename "$INPUT_FILE")"
# Собираем образ если нужно
if ! docker image inspect "$IMAGE" &>/dev/null; then
echo "образ $IMAGE не найден, собираю..."
docker build -t "$IMAGE" "$SCRIPT_DIR"
fi
echo "-> конвертация $INPUT_FILE -> $OUTPUT_DIR/"
# Запуск контейнера:
# - вход: только .md файл (read-only)
# - выход: директория для .tex и .pdf
# - user: текущий пользователь (не root)
docker run --rm \
-v "$INPUT_ABS:/input/$INPUT_BASE:ro" \
-v "$OUTPUT_ABS:/output" \
--user "$(id -u):$(id -g)" \
"$IMAGE" "/input/$INPUT_BASE" -o /output