Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 为什么该脚本在寻源或直接执行时会产生不同的结果?_Bash_Command Line Arguments - Fatal编程技术网

Bash 为什么该脚本在寻源或直接执行时会产生不同的结果?

Bash 为什么该脚本在寻源或直接执行时会产生不同的结果?,bash,command-line-arguments,Bash,Command Line Arguments,我有一个名为my_mv.sh的包装器脚本,如下所示(我正在使用bash): 当我将它用作脚本并像/my_mv.sh file1 file2那样直接运行它时,结果与预期的一样。然而,当我将函数my_mv放入~/.bashrc并对其进行源代码转换时,将出现一个无限循环。 那么这两种方法有什么区别呢?我如何更改脚本,使其能够正确来源 顺便说一句,当使用zsh时,这两种方法的结果相似。您是在.bashrc中实际将其命名为my_mv,还是实际将其命名为mv,以覆盖默认值 如果是这样,请在函数中使用comm

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

当我将它用作脚本并像
/my_mv.sh file1 file2
那样直接运行它时,结果与预期的一样。然而,当我将函数my_mv放入
~/.bashrc
并对其进行源代码转换时,将出现一个无限循环。 那么这两种方法有什么区别呢?我如何更改脚本,使其能够正确来源


顺便说一句,当使用zsh时,这两种方法的结果相似。

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

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


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

对我有用。是
#不带
的行作为原始,还是换位错误?它是如何出现在
~/.bashrc
中的,可能您错过了一个
}
。事实上,我通过添加一行额外的
my_mv file1 file2
(file1和file2与
my_mv.sh
位于同一目录中)来测试此脚本。在
.bashrc
中,我使用了
别名mv=my_mv
,我发现这就是问题所在!非常感谢。
#/bin/bash
function my_mv(){   
FILE="${@: -1}" # bash or ksh,zsh 
echo $FILE
if [ -f $FILE ];   
then   
    mv -i $@                                                                                                                                                                     
else   
    mv $@   
fi   
}