2012-12-20 8 views
10

私はvirtualenvののソースコードを探していて、アクティブスクリプトは、このコードが含まれています["x"!= x]がbashで何をするのですか?

if [ -z "$VIRTUAL_ENV_DISABLE_PROMPT" ] ; then 
    _OLD_VIRTUAL_PS1="$PS1"  
    if [ "x" != x ] ; then 
     PS1="$PS1" 
    else 
    if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then 
     # special case for Aspen magic directories 
     # see http://www.zetadev.com/software/aspen/ 
     PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1" 
    else 
     PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1" 
    fi 
    fi 
    export PS1 
fi 

ライン​​は何をしますか? xはスクリプトのどこにも定義されていません。

答えて

10

Bashでは、このテストは失敗することが保証されています。 "x"およびxはいずれも単一の文字xからなる文字列であるため、[ "x" != x ]は常にゼロ以外の終了ステータス(つまり「false」)を返します。さらに、PS1="$PS1"というコマンドは実際には何もしません。それは変数PS1をすでに設定した値に設定するだけです。

私はこのスクリプトが何らかの形で自動生成されていると推測していますが、これらの文は少し違って見えることがあります。

+3

古いシェルの空の文字列をチェックするための古い[["x $ foo"!= x] "トリックのようです。 –

+0

これはまさにこれからのことです。スクリプトは自動生成され、そこにスプライスされる変数があります。 [this](https://github.com/pypa/virtualenv/blob/develop/virtualenv_embedded/activate.sh#L59)と[this](https://github.com/pypa/virtualenv/blob/develop/)を参照してください。 virtualenv.py#L1582)。ありがとうございました! –

+0

@AKaptur:ようこそ! – ruakh

関連する問題