Ist es möglich, einen Konfigurationsbefehl auf mehrere Zeilen statt auf eine lange Zeichenfolge aufzuteilen?
Z.B
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Bei Verwendung mehrerer Befehle wird die Zeile sehr lang und unlesbar. Ich würde sie gerne aufteilen, sodass ich pro Befehl eine Zeile verwenden kann. So etwas wie:
PostUp = iptables -A FORWARD -i %i -j ACCEPT; \
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Auf der Manpage steht, dass es auf dem INI-Format basiert, aber es gibt keine Hilfe zu diesem Thema.
Antwort1
Der wg-quick
Befehl ist einBash-Skript. Die Schleife, die Schlüssel liest (wie z. B. den PostUp
Schlüssel), verwendet read -r
die Verwendung von \
zum Trennen von Zeilen. Beim Lesen desselben Skripts wird jedoch Folgendes angezeigt:
POST_UP=( )
um es als Array zu deklarieren, und:
PostUp) POST_UP+=( "$value" ); continue ;;
um dem Array ein Element hinzuzufügen.
Die Ausführung erfolgt dann später mit ( eval
in der Funktion ist ein Befehl enthalten execute_hooks
):
execute_hooks "${POST_UP[@]}"
So kann man aufteilenmehrere Befehle(aber nichtbeliebige Linien) indem Sie dieselbe Tasteneingabe mehrfach verwenden. Das Beispiel des OP würde also folgendermaßen funktionieren:
PostUp = iptables -A FORWARD -i %i -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Eigentlichmanpagesagt es schon:
• PreUp, PostUp, PreDown, PostDown — Skriptschnipsel, die von bash(1) vor/nach dem Einrichten/Abbauen der Schnittstelle ausgeführt werden. Am häufigsten werden sie verwendet, um benutzerdefinierte DNS-Optionen oder Firewall-Regeln zu konfigurieren. Die spezielle Zeichenfolge `%i' wird erweitert zuSCHNITTSTELLE. Jeder Befehl kann mehrfach angegeben werden. In diesem Fall werden die Befehle der Reihe nach ausgeführt..