2017-04-08 9 views
-3

J'ai une commande dans mon Dockerfile que je dois courir et qui prend une chaîne séparée par des virgules comme un argument comme siCréer une ligne, chaîne délimitée par des virgules dans les Dockerfile

RUN $APPDIR/bin/install.sh --name arg1,arg2 

Cependant, pour la même raison que l'écriture apt-get sur plusieurs lignes (vous pouvez voir une vision plus claire diff dans le contrôle de la source), je voudrais faire quelque chose comme ça

RUN args=(\ 
    arg1 \ 
    arg2 \ 
) && args=$(printf "%s," "${args[@]}") \ 
    && $APPDIR/bin/install.sh --name "${args%,}" 

qui, lorsqu'il est lancé dans bash, nous pouvons voir que je ne reçois que chaîne délimitée par des virgules.

$ args=(\ 
    arg1 \ 
    arg2 \ 
) && args=$(printf "%s," "${args[@]}") \ 
    && echo "${args%,}" 
arg1,arg2 

Cependant, la commande Dockerfile RUN doit être conforme aux spécifications POSIX, et les tableaux ne sont pas pris en charge dans le shell POSIX.
Je reçois essentiellement Unsupported command: "("

Ce serait bien si n'importe qui peut fournir une manière plus propre de déclarer une liste, et comma-joindre cela.

+0

Future downvoters: S'il vous plaît ** commenter ** ou ajouter votre propre réponse –

Répondre

0

Trouver une alternative en utilisant un remplacement de chaîne.

RUN args=' \ 
    arg1, \ 
    arg2 \ 
    ' && $APPDIR/bin/install.sh --name $(echo $args | tr -d '[[:space:]]')