Câu lệnh chặn IF bên trong tập lệnh execlineb


1

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.


Cú pháp này có được hỗ trợ không: [ $SERVICE_2 = true ] && sh …?
Kamil Maciorowski

Không, ngay cả khi không ngắt dòng ``. Cùng một lỗi.
DarkGhostHunter

1
Tôi biết rất ít về 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?
Kamil Maciorowski

Tôi quyết định sử dụng sh. Về cơ bản, tôi đã băm /usr/sbin/with-contenv sh và tiến hành bình thường.
DarkGhostHunter

Câu trả lời:


2

Sau một số hoạt động đào, khối If trong execline trở nên quá nhiều sắc thái. Vì vậy, tôi đã giải quyết vấn đề gốc: thay đổi thành sh với các biến môi trường container.

#!/usr/bin/with-contenv sh

...

Sau đó tôi đã sử dụng exec để thực hiện quy trình (nếu không nó không kết nối với S6).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.