Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I can set my EDITOR variable in my .bashrc to e.g. gedit, which is a nice graphical editor on ubuntu. But when I log in over PuTTY that editor will fail.

What is the best way to detect if I'm logged in and can run a graphical editor, or not, and set EDITOR appropriately??

share|improve this question
up vote 2 down vote accepted

In ~/.xinitrc (or ~/.xprofile if X starts via a display manager):

export EDITOR=gedit

In .bashrc (or whatever user init file for your shell):

export EDITOR=emacs

I try to keep X related stuff out of my shell init files.

share|improve this answer

... some fiddling ... this may be it?

if [ "$DISPLAY." == "." ]; then
 export EDITOR='vim'
 export EDITOR='gedit'
share|improve this answer
Or you can check $SSH_CLIENT, but this approach will work when you'll login into a plain tty, too, so it's more flexible. – whitequark Aug 18 '10 at 0:02
if [ -z $DISPLAY ] – Dennis Williamson Aug 18 '10 at 1:47
@Dennis: why play with fire? if [[ -z $DISPLAY ]] in bash/ksh/zsh or if [ -z "$DISPLAY" ] to be portable (or if [ x"$DISPLAY" = x ] if you're paranoid about buggy antique Bourne shells). – Gilles Aug 18 '10 at 22:38
@Gilles: Because -z by definition knows how to deal with null and unset variables. However, you're correct insofar as it's better to have consistent habits. – Dennis Williamson Aug 19 '10 at 0:58
@Gilles: Thanks. I always use double brackets in Bash anyway. I never thought about the -o type of cases inside single brackets. – Dennis Williamson Aug 19 '10 at 16:16

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .