我正在为一堆图像写一个docker save
语句。而且我只想保存一幅图像,当某些标志设置为true时。
我正在提议像这样的东西
#!/bin/sh
docker save AA BB CC DD
if [ "${EE_flag}" = true ]; then
EE
fi
| gzip -o single-tarball.tar.gz
但是它失败了,因为docker save
实际上只是期望一些字符串作为参数,而不是IF / ELSE语句。我尝试使用三元运算符? :
,但似乎仅适用于数值。
sh中有任何技巧可以做到这一点吗?
答案 0 :(得分:2)
它有些重复,但是将适用于docker save
的所有可能参数:
if [ "${EE_flag}" = true ]; then
docker save AA BB CC DD EE
else
docker save AA BB CC DD
fi | gzip -o single-tarball.tar.gz
要降低接受度,可以使用脚本的位置参数。
set -- AA BB CC DD
[ "${EE_flag}" = true ] && set -- "$@" EE
docker save "$@" | gzip -o single-tarball.tar.gz
在功能更强大的Shell中,您将使用数组而不是位置参数,但是POSIX Shell尚不需要对数组的支持。
如果脚本已经在使用位置参数,则需要做一些额外的工作。或者,您可以定义一个函数(具有自己的位置参数集),该函数除保存其他任何参数外,还始终保存AA,BB,CC,DD。
ds () { docker save AA BB CC DD; }
if [ "${EE_flag}" = true; then
ds
else
ds EE
fi | gzip -o single-tarball.tar.gz
答案 1 :(得分:0)
以下代码可能会帮助
strParams="AA BB CC DD"
if [[ $EE_flag = true ]]; then
strParams="$strParams EE"
fi
docker save $strParams | gzip -o single-tarball.tar.gz
答案 2 :(得分:0)
您可以这样使用它:
docker save AA BB CC DD $( [[ $EE_flag = true ]] && echo "EE" ) |
gzip -o single-tarball.tar.gz