Tôi có Docker Container dựa trên Alpine chạy Lớp phủ S6 để quản lý hai dịch vụ bên trong nó (DB nhạc và giao diện web để quản lý). Vấn đề là dịch vụ thứ hai là tùy chọn và nó phụ thuộc vào ${SERVICE_2} biến môi trường (đúng | sai).
Vì vậy, về cơ bản tôi có cái này, nhưng dịch vụ không thể chạy được vì if khối không hợp lệ:
#!/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
Thực thi kịch bản trả về:
if: fatal: unterminated block
Nhân tiện, container không có bash; nó chạy Busybox. Tôi đang cố gắng tránh cài đặt bash trừ khi nó quan trọng.
Không, ngay cả khi không ngắt dòng ``. Cùng một lỗi.
—
DarkGhostHunter
Tôi biết rất ít về
—
Kamil Maciorowski
execlineb và cho rằng nó tương tự như sh, kể từ khi bạn if về cơ bản là giống nhau. Nhưng trang này nói rất khác if cú pháp và đây có thể là nguyên nhân gây ra lỗi của bạn. Một ý tưởng khác: bạn chạy sh cuối cùng; tại sao bạn không làm cho kịch bản này sh kịch bản ở nơi đầu tiên?
Tôi quyết định sử dụng
—
DarkGhostHunter
sh. Về cơ bản, tôi đã băm /usr/sbin/with-contenv sh và tiến hành bình thường.
[ $SERVICE_2 = true ] && sh …?