向/ etc / profile添加函数会导致gnome在登录后重新启动

时间:2011-12-24 23:54:34

标签: bash login profile gnome

我最近在Ubuntu 11.04中将我的/ etc / profile添加了以下bash函数定义(它是将CD命令快捷键到特定开发目录的函数):

################## 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" "$@"
  else
    cd $(python "$pathtopythonteleport" "$@")
  fi
}
################### JMOZTELEPORT END ###################

但是,一旦我这样做了(如果我从终端shell中获取/ etc / profile,它工作正常),我无法登录Gnome。它登录确定,但随后立即关闭Gnome并将我带回登录屏幕。如果我从/ etc / profile中删除这些东西,它再次允许我登录正常。

我对导致gnome重启的原因感到困惑。关于问题在哪里的任何想法?

2 个答案:

答案 0 :(得分:2)

您将其置于调试状态,并查看导致其重新启动的原因。使用set -x命令启用调试模式。同样,set +x命令禁用它。

set -x放在/etc/profile的顶部会导致打印调试信息。

答案 1 :(得分:2)

/etc/profile/bin/sh提供,这可能发生在Gnome启动期间。它可能会扼杀[[ ... ]]语法,这是特定于bash的。 (/bin/sh可能是也可能不是/bin/bash的符号链接,具体取决于系统。)

由于您的功能似乎是特定于bash的,因此您可以考虑将其放在/etc/bash.bashrc而不是/etc/profile,或者甚至是$HOME/.bashrc。 (您是否需要在非交互式shell中使用它?)