2011-12-24 5 views
1

最近私はUbuntu 11.04の/ etc/profileに次のbash関数定義を追加しました(CDコマンドを特定の開発ディレクトリにショートカットする機能です)。私はこれを行うならば、私はGnomeのにログインすることができません/etc/profileに関数を追加すると、ログイン後にgnomeが再起動されます

################## JMOZTELEPORT BEGIN ################## 

function JMozTeleport() { 
    version=0.4.58 
    pathtopythonpackages=`python -c "from site import getsitepackages; print getsitepackages()[0]"` 
    pathtopythonteleport="$pathtopythonpackages/JMozTools-$version-py2.7.egg/JMozTools/JMozTeleport.py" 

    # $1 is the command to run 
    isversion=0 
    ishelp=0 
    if [[ "$1" == "-v" || "$1" == "--version" ]] 
    then 
    isversion=1; 
    fi 
    if [[ "$1" == "-h" || "$1" == "--help" ]] 
    then 
    ishelp=1; 
    fi 
    if [ -z $1 ] 
    then 
    python "$pathtopythonteleport" "-h" 
    elif [ $1 == "version" ] 
    then 
    echo $version 
    elif [ $isversion == 1 -o $ishelp == 1 ] 
    then 
    python "$pathtopythonteleport" "[email protected]" 
    else 
    cd $(python "$pathtopythonteleport" "[email protected]") 
    fi 
} 
################### JMOZTELEPORT END ################### 

は、しかし、(ターミナルシェルからIソースは/ etc/profile場合は正常に動作しています)。それはokでログインしますが、すぐにGnomeを閉じてログイン画面に戻ります。私の/ etc/profileからこのファイルを削除しても、再度ログインすることができます。

これが原因でgnomeが再起動されているのは混乱しています。問題はどこにあるのか?

答えて

2

/etc/profileのソースは/bin/shで、これはおそらくGnomeの起動時に起こります。おそらく、[[ ... ]]構文で窒息しています。これはbash固有の構文です。 (/bin/shは、システムに応じて/bin/bashへのシンボリックリンクである場合もあれば、そうでない場合もあります)。

関数がbash固有のように見えるので、/etc/profileではなく/etc/bash.bashrcに入れるか、おそらく$HOME/.bashrcでもかまいません。 (非対話シェルでは必要ですか?)

+0

ありがとう。私は/ etc/bashrcに置いてしまいました。 – jwir3

2

デバッグの対象とし、再起動の原因を確認します。デバッグモードを有効にするには、set -xコマンドを使用します。同様に、set +xコマンドはそれを無効にします。

/etc/profileの先頭にset -xを置くと、デバッグ情報が出力されるはずです。

+0

私はあなたの提案を感謝し、私はこれを使用しましたが、他の答えは本当に問題であったので、代わりにそれを受け入れました。私は情報を感謝しました...しかし、これは間違いなく今後役立つでしょう。 – jwir3

+0

もちろん、問題ありません。すべてのベストと素晴らしい新年を! :) –

関連する問題