bash 中的条件
Conditions in bash
Bash 我的 Jenkins 管道的脚本按条件删除所有 docker 个图像:
docker images --format="{{.Repository}} {{.Tag}} {{.ID}}" |
grep -v "latest" |
cut -d ' ' -f3 |
xargs docker rmi -f
但有时 cut -d ' ' -f3
图片列表为空,我收到错误消息:
"docker rmi" requires at least 1 argument.
更新
docker images --format="{{.Repository}} {{.Tag}} {{.ID}}"
的输出:
adoptopenjdk/openjdk11 latest 5578e7619e88
Nginx latest 2622e6cca7eb
我如何重写不调用的脚本xargs docker rmi -f
如果从不调用则不调用删除?
您应该可以进行两步操作,例如:
ids="$(docker images --format='{{.ID}} {{.Tag}}' | awk '!/latest/{print }')"
if [[ -n "${ids}" ]] ; then
for id in ${ids} ; do
docker rmi -f ${id}
done
fi
如果您在字段中有 white-space,您通常需要注意边缘情况,但是,因为根据 docker
doco(试着说 that 快三遍),这应该不是问题。
您会注意到一些其他变化:
- 将 ID 移动到输出中的第一个字段,以防存储库或标签中可能有 spaces(这会搞砸字段选择,即使 doco 声明这可能不是问题);
- 将您的
grep/cut
组合组合成一个 awk
(也针对之前的要点进行了调整);和
- 从输出中删除了存储库名称,因为存储库名称如“populatestandardmachine”将导致该存储库被忽略regardless 标签。
像这样:
while IFS= read -r _ _ img; do
docker rmi -f "$img"
done < <(
docker images --format="{{.Repository}} {{.Tag}} {{.ID}}" | grep -v ' latest '
)
使用 GNU xargs。
将选项 --no-run-if-empty
或 -r
添加到您的 xargs 命令。
Bash 我的 Jenkins 管道的脚本按条件删除所有 docker 个图像:
docker images --format="{{.Repository}} {{.Tag}} {{.ID}}" |
grep -v "latest" |
cut -d ' ' -f3 |
xargs docker rmi -f
但有时 cut -d ' ' -f3
图片列表为空,我收到错误消息:
"docker rmi" requires at least 1 argument.
更新
docker images --format="{{.Repository}} {{.Tag}} {{.ID}}"
的输出:
adoptopenjdk/openjdk11 latest 5578e7619e88
Nginx latest 2622e6cca7eb
我如何重写不调用的脚本xargs docker rmi -f
如果从不调用则不调用删除?
您应该可以进行两步操作,例如:
ids="$(docker images --format='{{.ID}} {{.Tag}}' | awk '!/latest/{print }')"
if [[ -n "${ids}" ]] ; then
for id in ${ids} ; do
docker rmi -f ${id}
done
fi
如果您在字段中有 white-space,您通常需要注意边缘情况,但是,因为根据 docker
doco(试着说 that 快三遍),这应该不是问题。
您会注意到一些其他变化:
- 将 ID 移动到输出中的第一个字段,以防存储库或标签中可能有 spaces(这会搞砸字段选择,即使 doco 声明这可能不是问题);
- 将您的
grep/cut
组合组合成一个awk
(也针对之前的要点进行了调整);和 - 从输出中删除了存储库名称,因为存储库名称如“populatestandardmachine”将导致该存储库被忽略regardless 标签。
像这样:
while IFS= read -r _ _ img; do
docker rmi -f "$img"
done < <(
docker images --format="{{.Repository}} {{.Tag}} {{.ID}}" | grep -v ' latest '
)
使用 GNU xargs。
将选项 --no-run-if-empty
或 -r
添加到您的 xargs 命令。