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
而不是组合的tr
and cut
,因为awk
可以正确处理连续的空格,而无需先修剪(另请参阅我的旧问题此处)。