POPD

2016-11-07 46 views
4

在bash什麼是popd正確的方式返回/從函數退出之前?例如,POPD

function fn() { 
    pushd ~ >/dev/null 
    if [ $1 = $2 ]; then 
     return 0; 
    elif [ $2 = $3 ]; then 
     return 1; 
    else 
     return 2; 
    fi 
    popd >/dev/null 
} 

我應該在每次返回前寫popd嗎?或者,我應該以另一種方式做這件事嗎?

回答

7

對於這個我可能做這種方式:

fn() { 
    pushd ~ >/dev/null 
    if [ "$1" = "$2" ]; then 
     ret=0 
    elif [ "$2" = "$3" ]; then 
     ret=1 
    else 
     ret=2 
    fi 
    popd >/dev/null 
    return $ret 
} 

這樣我就不必每次返回之前重複「清理」代碼。

另一種方法是在subshel​​l中完成這項工作,並將cd添加到所需的目錄中,儘管該子shell無法修改父級的環境(這是我們想要的一部分)。

fn() (
    cd ~ 
    if [ "$1" = "$2" ]; then 
     return 0 
    elif [ "$2" = "$3" ]; then 
     return 1 
    else 
     return 2 
    fi 
) 
+1

可選的改進包括使'ret'本地和檢查cd/pushd的退出代碼,以避免在錯誤的目錄(除了通常的變量引用之外)開始工作。 –

相關問題