我有两个别名:
alias rm='python my/rm/script.py '
alias docker='sudo docker '
问题是在运行语句时$ docker rm ARGS
关键字rm
被扩展为别名并且 docker 抱怨说'python' is not a docker command.
我寻找了几个解决方案。一种解决方案是使用command
关键字。另一个是用于shopt
切换别名扩展。我无法很好地利用它们。
这两个都不适合我:
alias docker='shopt -u expand_aliases; sudo docker '
alias docker='command sudo docker '
别名作品:
alias docker='unalias rm; sudo docker '
unalias 的问题是,一段时间后我会忘记我的 rm 别名在运行的 shell 环境中不再存在,无论我的 docker 命令在哪里执行。因此,我rm
在文件上使用时会立即将其删除,这与我的 python 脚本形成对比,后者充当安全网并将待删除的文件移动到垃圾箱中。我想避免陷入这种错误地最终使用 GNU rm 命令而不是我的 rm 别名的情况,这就是我不想使用 unalias 的原因。
另一个解决方案是放弃 docker 别名。缺点是我必须sudo
为我想执行的每个有用的 docker 命令编写关键字。这是我避免使用 docker 别名的苦差事。
另一种解决方案是像这样转义 rm 关键字:
docker \rm ARGS
这行得通。但我希望这里有一个即发即弃的解决方案,这样我就可以自然地执行我的 docker 命令,而不必担心其他任何事情。
鉴于上述限制,我如何为 rm 和 docker 使用别名,但防止rm
关键字在 docker 命令中被扩展为别名?
rm
在别名之后使用时扩展别名的原因docker
是别名的定义docker
在末尾包含一个空格。在别名定义的末尾放置一个空格是要求shell 将别名扩展应用到下一个词的方法。解决方案:定义您的
docker
别名,末尾没有空格。您可能还想删除其他别名末尾的空格。docker
您也可以通过将您的用户添加到组中来完全摆脱您的别名docker
,但这是您在本地做出的管理决定。