IF-Blockanweisung in einem Execlineb-Skript

857
DarkGhostHunter

Ich habe einen Docker-Container auf Alpine-Basis, der S6 Overlay zur Verwaltung von zwei Diensten (eine Musikdatenbank und eine Webschnittstelle zur Verwaltung) ausführt. Das Problem ist, dass der zweite Dienst optional ist und von der $Umgebungsvariablen abhängt (true | false).

Im Grunde habe ich das, aber der Dienst kann nicht ausgeführt werden, da der ifBlock nicht gültig ist:

#!/usr/bin/execlineb -P  with-contenv  if [ $SERVICE_2 = true ]; then \ sh -c "exec -a service_2 /usr/bin/php /var/www/service_2_music_admin_script.php >> /proc/self/fd/1 2>&1" \ ;fi 

Beim Ausführen des Skripts wird Folgendes angezeigt:

if: fatal: unterminated block 

Übrigens hat der Container nicht bash; es läuft Busybox. Ich versuche, die Installation von bash zu vermeiden, sofern dies nicht kritisch ist.

1
Wird diese Syntax möglicherweise unterstützt: `[$ SERVICE_2 = true] && sh…`? Kamil Maciorowski vor 7 Jahren 0
Nein, auch ohne Zeilenumbrüche `\`. Gleicher Fehler DarkGhostHunter vor 7 Jahren 0
Ich wusste wenig über "execlineb" und nahm an, dass es "sh" ähnlich ist, da Ihr "if" im Grunde das gleiche ist. [Diese Seite] (https://skarnet.org/software/execline/if.html) gibt jedoch eine ganz andere "if" -Syntax an, und dies könnte die Ursache für Ihren Fehler sein. Eine andere Idee: Sie laufen irgendwann `sh`; Warum machen Sie dieses Skript nicht überhaupt zu einem `sh`-Skript? Kamil Maciorowski vor 7 Jahren 1
Ich entschied mich für "sh". Grundsätzlich habe ich `/ usr / sbin / with-contenv sh 'hashbanged und bin normal weitergefahren. DarkGhostHunter vor 7 Jahren 0

1 Antwort auf die Frage

2
DarkGhostHunter

Nach einigem Graben wurde der If-Block in execline zu viel Nuance. Also habe ich das Grundproblem gelöst: mit Containerumgebungsvariablen zu sh wechseln.

#!/usr/bin/with-contenv sh  ... 

Dann habe ich execden Prozess ausgeführt (sonst wird keine Verbindung zu S6 hergestellt).