强制cp在默认使用-i选项时覆盖

时间:2014-04-28 21:57:34

标签: tcsh cp

我使用c shell(特别是tcsh)。

我的.custom文件中有以下别名,因此默认情况下cp始终定义为-i标记:

alias cp cp -i

对于我试图编写的特定shell脚本,cp需要强制覆盖,如果我想覆盖目标文件则不提示我。我尝试在我的shell脚本中使用cp --remove-destination,但仍然提示我是否覆盖目标文件。当-i已经是默认行为时,用于强制覆盖的正确标志是什么?

3 个答案:

答案 0 :(得分:2)

添加参数的别名可能会在其他地方产生意外结果,例如alias cpi cp -i,您可能最好不要使用别名。这样你就可以避免可能的冲突,并且也能够以常规的方式使用命令 或者,如果您坚持保留别名,则可以直接通过cp使用/bin/cp

答案 1 :(得分:2)

您始终可以通过在前面加上'\'来调用原始/无别名命令(尝试:which cp vs which \cp)。

运行:\cp a b绕过别名,即调用原始命令,如果没有别名则调用该命令。这比明确运行/bin/cp要好,因为:

  • 它更短且更直观(当您想要运行cp时,您希望运行cp,而不是/bin/cp
  • 它不要求您知道命令的完整路径
  • 它也适用于shell-builtins(例如cd),它们不是可执行文件,因此没有“完整路径”

答案 2 :(得分:1)

您有两种可能性:

首先使用系统cp而不是调用你的别名:

/bin/cp .....

第二个覆盖-i选项(所以它看起来像cp -i -n)

cp -n ....

第二个的可读性要低得多,所以我建议使用第一个。