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
}