É possível dividir um comando de configuração em várias linhas em vez de uma string longa?
Por exemplo
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Ao usar mais comandos a linha fica muito longa e ilegível. Gostaria de dividi-lo para poder usar uma linha por comando. Algo como:
PostUp = iptables -A FORWARD -i %i -j ACCEPT; \
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
A página de manual diz que é baseado no formato ini, mas não tem ajuda neste tópico.
Responder1
O wg-quick
comando é umscript bash. As chaves de leitura de loop (como a PostUp
chave) estão sendo usadas, read -r
o que impede qualquer uso \
para separar linhas. Mas a leitura deste mesmo script mostra:
POST_UP=( )
para declará-lo como um array e:
PostUp) POST_UP+=( "$value" ); continue ;;
para adicionar um elemento ao array.
Em seguida, é executado posteriormente com (há um eval
comando na função execute_hooks
):
execute_hooks "${POST_UP[@]}"
Assim pode-se dividirvários comandos(mas nãolinhas arbitrárias) usando várias vezes a mesma entrada de chave. Então o exemplo do OP funcionaria assim:
PostUp = iptables -A FORWARD -i %i -j ACCEPT
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
Na verdade opágina de manualjá conta:
• PreUp, PostUp, PreDown, PostDown — trechos de script que serão executados pelo bash(1) antes/depois de configurar/desmontar a interface, mais comumente usados para configurar opções personalizadas de DNS ou regras de firewall. A string especial `%i' é expandida paraINTERFACE. Cada um pode ser especificado múltiplas vezes, caso em que os comandos são executados em ordem.