在我的 /home/user/.bashrc 文件中,我有这些别名来防止错误:
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
如果我真的确定我在做什么,我可以使用或覆盖rm
和mv
别名,它不会问我是否真的要覆盖文件。rm -f
mv -f
问题是它不适用于该cp
命令,使用时cp -f
仍然会问我一个问题。
这是正常的吗?我应该怎么做才能cp -i
默认使用别名并且也能够使用cp -f
命令?
我正在使用 Debian Wheezy 64 位。
答案1
通过给出cp -f
,该选项只需与现有选项相加。
也就是说,如果您有一个alias cp='cp -i'
,则命令中的 cp 一词将被替换cp -f
,因此您将得到cp -i -f file1 file2
。
要覆盖别名:
\cp -f file1 file2
命令前的反斜杠将禁用别名。您可以使用command cp
代替来\cp
提高可读性。
答案2
尽管-f
意味着力量在所有这些上,对于cp
,这意味着如果无法更新目标,则首先尝试删除目标来强制执行。
对于mv
和rm
,-f
只需覆盖-i
。但对于cp
,它改变了实用程序的行为,在这种情况下-f
并不相反,-i
cp -i -f
,有意义和手段,如果目标存在,请询问用户,如果无法覆盖,请先将其删除。
即使对于mv
和rm
,当涉及到发送给用户的警告和错误消息时,添加-f
也不同于删除。-i
例如rm non-existent-file
会报告错误而rm -i -f non-existent-file
不会报告错误。
如前所述,要消除 的影响,您应该使用提供的任何解决方案禁用别名,-i
而不是添加。-f