Добавление функции в / etc / profile приводит к перезапуску gnome после входа в систему - PullRequest
1 голос
/ 25 декабря 2011

Недавно я добавил следующее определение функции bash в мой / etc / profile в Ubuntu 11.04 (это функция для быстрого вызова команды 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 ###################

Однако, как только я это сделаю (что работает нормально, если я использую / etc / profile из оболочки терминала), я не могу войти в Gnome. Он входит в систему нормально, но затем он сразу же закрывает Gnome и возвращает меня к экрану входа. Если я удалю этот материал из моего / etc / профиля, он снова позволит мне войти в систему нормально.

Я не понимаю, что заставляет гном перезапускаться. Есть идеи, где проблема?

Ответы [ 2 ]

2 голосов
/ 25 декабря 2011

/etc/profile получен /bin/sh, что, вероятно, происходит во время запуска Gnome. Вероятно, он задыхается от синтаксиса [[ ... ]], который зависит от bash. (/bin/sh может быть или не быть символической ссылкой на /bin/bash, в зависимости от системы).

Поскольку ваша функция, похоже, зависит от bash, вы можете подумать о том, чтобы поместить ее в /etc/bash.bashrc вместо /etc/profile или, возможно, даже $HOME/.bashrc. (Вам это нужно в неинтерактивных оболочках?)

2 голосов
/ 25 декабря 2011

Вы поставили его на отладку и посмотрите, что вызывает его перезапуск.Используйте команду set -x для включения режима отладки.Точно так же команда set +x отключает ее.

Помещение set -x вверху вашего /etc/profile должно привести к распечатке отладочной информации.

...