我最近在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重启的原因感到困惑。关于问题在哪里的任何想法?
答案 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中使用它?)