最近在 非交互式shell 中执行 cp 命令时,遇到了个坑,由于目标文件已存在,cp 命令出现交互式输入,要求确认是否执行强制覆盖,但由于是非交互式 shell,无法操作。查看 cp 命令的文档后发现,cp 命令可以进行强制覆盖,只需要执行 cp -rf <source> <target>
即可,但是在 shell 中输入强制覆盖的指令后,依然无法成功复制。经过折腾,终于找到了原因,记录一下解决方案和爬坑过程。
解决方案
解决方案一:使用原生CP命令/bin/cp -rf <source> <target>
解决方案二:取消别名1
2
3 unalias cp
cp -rf <source> <target>
alias cp='cp -i'
无法强制覆盖的原因
部分 linux 机器在配置命令别名时,会将 cp 命令配置为 cp -i
,其中,-i 表示交互式模式,因此,当目标文件已存在时,会出现交互式输入,要求用户输入是否执行强制覆盖。
当出现使用 linux 命令但未获得预期结果时,可执行 alias
查看当前命令是否为 别名,然后再做后续排查,避免掉入别名带来的天坑中。