2017-08-05 193 views
1

碼頭工人的說法在我的bash文件條件我有這樣的事情在猛砸

docker run -d \ 
    --network=host \ 
    --name my-service \ 
    --log-driver="$LOGGING" \ 
    if [[ "$LOGGING" == 'splunk' ]]; then 
    echo "--log-opt tag={{.ImageName}}/{{.Name}}/{{.ID}} \\"; 
    echo "--log-opt env=NODE_ENV \\"; 
    fi 

但shellcheck通過展示以下結果抱怨。任何想法? https://github.com/koalaman/shellcheck/wiki/SC1089

+0

您是否打算使用docker命令導致無論是否有這兩個「--log-opt」標誌? –

+0

是的。它是 – Mazzy

回答

4

首先構建參數列表(數組中的),然後電話docker。這有利於擺脫醜陋的連續字符。

docker_opts=(
    -d 
    --network=host 
    --name my-service 
    --log-driver="$LOGGING" 
    --log-opt="$log_opt" 
) 

if [[ $LOGGING == splunk ]]; then 
    docker_opts+=(
     --log-opt "tag={{.ImageName}}/{{.Name}}/{{.ID}} \\" 
     --log-opt "env=NODE_ENV \\" 
    ) 
fi 

docker run "${docker_opts[@]}" 

雖然主要的想法是保持條件代碼儘可能小,並保持它與無條件代碼分開。

1

我建議使用$(if ..; then ...; fi)

docker run -d \ 
    --network=host \ 
    --name my-service \ 
    --log-driver="$LOGGING" \ 
    $(if [[ "$LOGGING" == 'splunk' ]]; then 
    echo "--log-opt tag={{.ImageName}}/{{.Name}}/{{.ID}}" 
    echo "--log-opt env=NODE_ENV" 
    fi) 
+0

這種方法不起作用,或者是因爲它創建了一個docker運行命令,如果if爲false,則不會添加任何下一個命令。我的意思是該命令應該附加圖像的名稱。 – Mazzy

+1

這是等待發生的引用錯誤。 – chepner

+0

@Mazzy:你測試過了嗎? – Cyrus