• [^] # Re: HEREDOC et variables

    Posté par . En réponse au journal Zabbix, autossh, systemd. Évalué à 3.

    Je ne vois pas bien le problème dont tu parle, mais à minima tu peux te simplifier la vie en construisant la commande dans ton script (1 ligne si tu t'embête pas avec les longueurs de ligne, 3 ou 4 sinon) et construire ton document ainsi :

    cat << 'EOF' > /etc/systemd/system/sshtunel_${ASSHHOST}_${TUNNELID}.service
    [Unit]
    Description=Keeps a tunnel to '${ASSHHOST}' open, tunnel ID : '${TUNNELID}'
    After=network.target
    [Service]
    User=${ASSHLUSER}
    # -p [PORT]
    # -l [user]
    # -M 0 --> no monitoring
    # -N Just open the connection and do nothing (not interactive)
    # LOCALPORT:IP_ON_EXAMPLE_COM:PORT_ON_EXAMPLE_COM
    Environment="AUTOSSH_GATETIME=0" "AUTOSSH_PORT=0"
    ExecStart=${ssh_cmd_format}
    [Install]
    WantedBy=multi-user.target
    EOF

    Il est clair et tu évite d'avoir une dizaine de sed compliqué à relire et à mettre à jour.

    À minima quitte à utiliser bash, tu peux faire :

    service_file="/etc/systemd/system/sshtunel_${ASSHHOST}_${TUNNELID}.service"
    declare -A unit_vars
    unit_vars[__ASSHHOST__]="<IP serveur zabbix>"
    # comme tes variables ne servent qu'au remplacement tu peu directement les stocker dans le dictionnaire
    for var in "${!unit_vars[@]}" ; do
     sed -i "s|${var}|${unit_vars[$var]}|g" "${service_file}"
    done

    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)