#!/bin/bash # Wrapper pour exécuter le script MD_to_Print dans Docker # Usage: ./docker_run.sh fichier.md [options...] set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" MD_FILE="${1:-}" # Couleurs RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # Fonction d'aide show_help() { cat << EOF Wrapper Docker pour MD_to_Print Usage: $0 fichier.md [options...] Ce script simplifie l'exécution de MD_to_Print dans Docker en gérant: - Les chemins absolus des fichiers - Le montage des volumes - Le passage des arguments - La gestion des erreurs Docker EXEMPLES: $0 documents/rapport.md --preview $0 documents/rapport.md --printer HP_LaserJet --copies 2 $0 documents/rapport.md --config config.conf --verbose OPTIONS: Toutes les options de md_to_print.sh sont supportées. Utilisez: docker run --rm md-to-print:latest --help pour voir toutes les options disponibles. EOF } # Vérification des arguments if [ -z "$MD_FILE" ] || [ "$MD_FILE" = "-h" ] || [ "$MD_FILE" = "--help" ]; then show_help exit 0 fi # Vérifier que Docker est disponible if ! command -v docker &> /dev/null; then echo -e "${RED}Erreur: Docker n'est pas installé ou non disponible dans le PATH${NC}" exit 1 fi # Vérifier que le fichier existe if [ ! -f "$MD_FILE" ]; then echo -e "${RED}Erreur: Le fichier '$MD_FILE' n'existe pas${NC}" exit 2 fi # Obtenir le chemin absolu du fichier MD_FILE_ABS="$(realpath "$MD_FILE")" MD_DIR="$(dirname "$MD_FILE_ABS")" MD_NAME="$(basename "$MD_FILE_ABS")" # Vérifier que le fichier est dans le répertoire documents ou un sous-répertoire if [[ ! "$MD_DIR" =~ ^"$SCRIPT_DIR"/documents ]]; then echo -e "${YELLOW}Attention: Le fichier n'est pas dans le répertoire documents/${NC}" echo -e "${BLUE}Le fichier sera accessible via le montage du répertoire parent${NC}" MD_REL_PATH="$(realpath --relative-to="$SCRIPT_DIR" "$MD_FILE_ABS")" MD_DIR="$SCRIPT_DIR" MD_NAME="$MD_REL_PATH" fi # Créer les répertoires nécessaires mkdir -p "$SCRIPT_DIR/documents" "$SCRIPT_DIR/output" "$SCRIPT_DIR/logs" # Vérifier si l'image Docker existe if ! docker images md-to-print:latest --format "{{.Repository}}:{{.Tag}}" | grep -q "md-to-print:latest"; then echo -e "${YELLOW}Image Docker non trouvée. Construction de l'image...${NC}" cd "$SCRIPT_DIR" docker build -t md-to-print:latest . fi # Construire la commande Docker DOCKER_CMD=( docker run --rm -it -v "$SCRIPT_DIR/documents:/workspace/documents:ro" -v "$SCRIPT_DIR/output:/workspace/output" -v "$SCRIPT_DIR/logs:/workspace/logs" --network host ) # Ajouter le support X11 si DISPLAY est défini (pour prévisualisation) if [ -n "${DISPLAY:-}" ]; then DOCKER_CMD+=( -e DISPLAY="$DISPLAY" -v /tmp/.X11-unix:/tmp/.X11-unix:ro ) fi # Ajouter l'accès CUPS si disponible if [ -d "/var/run/cups" ]; then DOCKER_CMD+=(-v /var/run/cups:/var/run/cups:ro) fi DOCKER_CMD+=(md-to-print:latest) # Ajouter le fichier markdown et les options if [[ "$MD_DIR" == "$SCRIPT_DIR" ]]; then DOCKER_CMD+=("/workspace/$MD_NAME") else DOCKER_CMD+=("/workspace/documents/$MD_NAME") fi # Ajouter les options restantes shift for arg in "$@"; do DOCKER_CMD+=("$arg") done # Exécuter echo -e "${GREEN}Exécution dans Docker...${NC}" echo -e "${BLUE}Commande: ${DOCKER_CMD[*]}${NC}" echo "" exec "${DOCKER_CMD[@]}"