2013-01-31 51 views
0

我有一個名爲my_mv.sh像下面(我使用bash)的包裝腳本:爲什麼這個腳本在獲取或直接執行時會產生不同的結果?

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

當我使用它作爲一個腳本,並直接像./my_mv.sh file1 file2運行,如預期的結果。但是,當我把函數my_mv納入~/.bashrc來源它會有一個無限循環。 那麼這兩種方法有什麼區別?我怎樣才能改變腳本,使其可以正確地來源?

順便說一下,使用zsh時,兩種方法的結果相似。

+0

適合我。沒有'!'的'#!'行作爲原始文件,還是換位錯誤?它是如何出現在〜/ .bashrc中的,也許你錯過了一個'}'。 – cdarke

回答

2

您是否實際上在您的.bashrc中將其命名爲my_mv,或者您是否已將其命名爲mv,以覆蓋默認值?

如果是這樣,請在您的函數中使用command mv而不是mv來調用系統版本,而不是遞歸。

如果您只是將其作爲./my_mv.sh file1 file2運行,它將不會執行任何操作,因爲該函數已定義但未調用。

+0

實際上,我通過添加一行'my_mv file1 file2'(file1和file2與'my_mv.sh'位於同一目錄)來測試此腳本。在'.bashrc'中我使用了'alias mv = my_mv',我發現這是問題!非常感謝。 –

相關問題