Comment 14 for bug 678421

Revision history for this message
Martin Pitt (pitti) wrote : Re: Error in ~/.profile halts the X startup

That indeed would run .profile only once, but now introduces the problem that it dumps the entire environment, and all bash functions in set, and has to read and evaluate it back:

$ set|wc -l
14698

Reading and evaluating 15.000 lines of shell is not a triviality.

Also, can we make sure that more complicated variable or alias definitions actually correctly survive this subshell/set/sed/eval round? I have some stuff like

  alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'

(now a standard value for new user accounts in Ubuntu) and also stuff like

if [ "$TERM" = xterm -a -z "$SSH_TTY" ]; then
    export PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'
    export PS1="${debian_chroot:+\[\e[31m[$debian_chroot]\] }\[\e[31m\]\$? \[\e[30m\]\$(parse_git_branch)\[\e[32m\]\u@\h:\[\e[34m\]\w\n$\[\e[22m\]\[\e[30m\] "
fi

Also, functions that rely on variables like $$, or having a terminal as stdout/stderr would break.

As I already said, I don't think that there is any easy and efficient solution for this -- this is very much like t,he halting problem, shell is a Turing complete programming language after all. Also, it would again paper over the actual bug that the user introduced into his .profile -- we should tell him about it, instead of trying to interpret something half-working into broken scripts, which then also would only apply to particular environments like gdm. The next time the user would log into a VT, log into the box with ssh, use screen, or run a cron/at job it would break all over again.

I think the only really sensible solution here is to produce an error message.