Что такое форма оболочки и форма exec?
что такое форма оболочки и форма exec команд?
Я прошел через несколько документов, чтобы получить четкое представление о форме оболочки и exec форма. Но все это меня смущало. Может ли кто - нибудь помочь выяснить, в чем разница между этими двумя формами?
PS: хотя я столкнулся с этими терминами, когда я просматривал инструкции по файлу docker (ex: RUN, CMD, ENTRYPOINT
), Я хочу знать разницу между ними в целом, а не в контексте докера.
1 ответов
синтаксис оболочки docker (который является просто строкой как RUN
, ENTRYPOINT
и CMD
) будет запускать эту строку в качестве параметра /bin/sh -c
. Это дает вам оболочку для расширения переменных, суб-команд, вывода трубопроводов, связывания команд вместе и других удобств оболочки.
RUN ls * | grep $trigger_filename || echo file missing && exit 1
синтаксис exec просто запускает двоичный файл, который вы предоставляете с включенными вами args, но без каких-либо функций синтаксического анализа оболочки. В docker вы указываете это с помощью форматированного json матрица.
RUN ["/bin/app", "arg1", "arg2"]
преимуществом синтаксиса exec является удаление оболочки из запущенного процесса, что может препятствовать обработке сигналов. Переформатирование команды с помощью /bin/sh -c
в синтаксисе оболочки также может нарушить конкатенацию вашей точки входа и cmd вместе.