为什么此脚本在采购或直接执行时会发出不同的结果?

时间:2013-01-31 16:56:01

标签: bash command-line-arguments

我有一个名为my_mv.sh的包装脚本,如下所示(我正在使用bash):

#/bin/bash
function my_mv(){   
FILE="${@: -1}" # bash or ksh,zsh 
echo $FILE
if [ -f $FILE ];   
then   
    mv -i $@                                                                                                                                                                     
else   
    mv $@   
fi   
}   

当我将它用作脚本并像./my_mv.sh file1 file2一样直接运行时,结果如预期的那样。但是,当我将函数my_mv 放入~/.bashrc source 时,会出现无限循环。 那两种方法有什么区别?如何更改脚本以便可以正确获取?

BTW,当使用zsh时,两种方法的结果相似。

1 个答案:

答案 0 :(得分:2)

您实际上是在.bashrc中将其命名为my_mv,还是实际上将其命名为mv,以覆盖默认值?

如果是这样,请在函数中使用command mv而不是mv来调用系统版本而不是递归。

如果您只是将其作为./my_mv.sh file1 file2运行,它将不会执行任何操作,因为该函数已定义但未调用。