0

以下のようなラッパースクリプトがあり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ソースにすると、無限ループが発生します。では、2 つの方法の違いは何でしょうか。スクリプトを正しく変更するにはどうすればよいですか?

ところで、zsh を使用すると、2 つのアプローチで同様の結果が得られます。

4

1 に答える 1

2

デフォルトを上書きするために、実際に .bashrc で名前を付けましmy_mvたか、または実際に名前を付けましたか?mv

その場合は、代わりに関数内で使用command mvmvて、再帰する代わりにシステム バージョンを呼び出します。

これを として実行する./my_mv.sh file1 file2と、関数は定義されていますが呼び出されていないため、何もしません。

于 2013-01-31T17:13:55.547 に答える