¿Es posible dividir un comando de configuración en varias líneas en lugar de una cadena larga?
P.ej
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Cuando se utilizan más comandos, la línea se vuelve muy larga e ilegible. Me gustaría dividirlo para poder usar una línea por comando. Algo como:
PostUp = iptables -A FORWARD -i %i -j ACCEPT; \
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
La página de manual dice que está basada en el formato ini pero no ofrece ayuda sobre este tema.
Respuesta1
El wg-quick
comando es unscript de bash. PostUp
Se utilizan las claves de lectura de bucle (como la clave) read -r
, lo que impide cualquier uso \
para separar líneas. Pero leer este mismo guión muestra:
POST_UP=( )
declararlo como una matriz, y:
PostUp) POST_UP+=( "$value" ); continue ;;
para agregar un elemento a la matriz.
Luego se ejecuta más tarde con (hay un eval
comando en la función execute_hooks
):
execute_hooks "${POST_UP[@]}"
Así se puede dividirmúltiples comandos(pero nolíneas arbitrarias) utilizando varias veces la misma entrada clave. Entonces el ejemplo de OP funcionaría así:
PostUp = iptables -A FORWARD -i %i -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
En realidad elpágina de manualya lo dice:
• PreUp, PostUp, PreDown, PostDown: fragmentos de script que serán ejecutados por bash(1) antes/después de configurar/derribar la interfaz, más comúnmente utilizados para configurar opciones DNS personalizadas o reglas de firewall. La cadena especial '%i' se expande aINTERFAZ. Cada uno se puede especificar varias veces, en cuyo caso los comandos se ejecutan en orden.