cp -f 不能覆盖 cp -i 别名

bap*_*ptx 8 bash alias

在我的 /home/user/.bashrc 文件中,我有这些别名来防止错误:

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
Run Code Online (Sandbox Code Playgroud)

如果我真的确定我在做什么,我可以使用or覆盖rmmv别名,它不会问我是否真的想覆盖文件。rm -fmv -f

问题是它对cp命令不起作用,使用cp -f仍然会问我一个问题。

这是正常的吗?我应该怎么做才能在cp -i默认情况下使用别名并能够使用cp -f命令?

我正在使用 Debian Wheezy 64 位。

Gur*_*uru 12

通过 give cp -f,该选项只是与现有选项相加。

也就是说,如果您有一个alias cp='cp -i',则命令中的单词 cp 将被替换cp -f,因此您将获得cp -i -f file1 file2.

要覆盖别名:

\cp -f file1 file2
Run Code Online (Sandbox Code Playgroud)

命令前的反斜杠将禁用别名。您可以使用command cp而不是\cp为了可读性。


Sté*_*las 9

虽然-f意味着对所有这些强制执行,对于cp,这意味着如果无法更新目的地,则首先尝试删除目的地

对于mvand rm-f只是覆盖-i. 但是对于cp,它改变了实用程序的行为,在那种情况下-f不是相反的-icp -i -f有意义并且意味着,如果目标存在,询问用户,如果它不能被覆盖,首先将其删除

即使对于mvand rm,在发送给用户的警告和错误消息方面,添加-f与删除-i也不同。例如rm non-existent-file会报告错误而rm -i -f non-existent-file不会。

如前所述,要消除 的影响-i,而不是添加-f,您应该使用提供的任何解决方案禁用别名。