用于删除 docker 映像的 Bash 别名不使用强制标志

jkg*_*nai 3 bash bashrc docker

目前我有一个别名来强制删除图像,命令如下:

docker rmi $(docker images | grep pattern | grep -v other_pattern | tr -s ' ' | cut -d ' ' -f 3) -f
Run Code Online (Sandbox Code Playgroud)

在我的里面~/.bashrc看起来像:

rm_images="docker rmi $(docker images | grep pattern | grep -v other_pattern | tr -s ' ' | cut -d ' ' -f 3) -f"
Run Code Online (Sandbox Code Playgroud)

然而,当执行时我得到以下信息:

Error response from daemon: conflict: unable to delete <image_id> (must be forced) - image is referenced in multiple repositories
Run Code Online (Sandbox Code Playgroud)

Art*_*ild 10

首先,您可能应该遵循原始文档中的语法,即docker rmi -f <images>.

此外,在定义别名时,您应该在每次运行别名时使用单引号来计算表达式。如果您使用双引号(如您在问题中所示),则仅在定义别名时才会评估表达式(另请参阅此处)。

因此,按如下方式定义您的别名(考虑到您的命令替换是正确的):

alias rm_images='docker rmi -f $(docker images | grep pattern | grep -v other_pattern | tr -s " " | cut -d " " -f 3)'
Run Code Online (Sandbox Code Playgroud)

请注意命令替换中的每个单引号现在已替换为双引号,这对于这些命令同样有效。

最后,您可能会考虑使用awk而不是组合的trand cut,因为awk可以正确处理连续的空格,而无需先修剪(另请参阅我的旧问题此处)。