Starting a program from a command line versus clicking an icon.

Oliver Fromme check+ilodic00rsiztgx5 at fromme.com
Tue Aug 23 06:39:00 PDT 2005


Michael Schuh <michael.schuh at xxxxxxxxx> wrote:
 > walt <wa1ter at xxxxxxxxxxxxx>:
 > > I've written a little C program named rlc which generates
 > > random color strings like 'rgb:a5/b3/f1' which I can use
 > > like this to start xterm:
 > > 
 > > xterm -bg `rlc` (gives a random-light-colored background)
 > > 
 > > This works great when I type the command from an xterm
 > > window -- but it fails when I click on a gnome or xfce
 > > icon containing the same command.
 > > 
 > > Any idea why those two methods of starting a program
 > > don't produce the same result?
 >
 > my first shot (not really tested, but my goldfinger say's :-D)
 > the backquotes around rlc......

Right.  When typed in an xterm, the line is parsed by the
shell, including the backticks which are special syntax of
a shell.  I don't use gnome, but I guess it doesn't pass
the command to a shell for execution, but just uses execve()
or similar.

 > to workaraund you can try little shell-script.
 > 
 > ----8<-----
 > #!/bin/sh
 > xterm -ls +sb -bg `rlc` $@
 > ---->8----

May I improve on that a bit?

#!/bin/sh -
exec xterm -ls +sb -bg `rlc` "$@"

The "exec" prevents a useless shell process hanging around
until the xterm exits, and the quotes around "$@" are
required to make it work correctly with arguments that
contain spaces.  Without quotes, $@ and $* behave the same.

Personally, I also use "-sl 10000" to get 10,000 lines of
scrollback history.  My xterm wrapper script also sets the
font size depending on the display width, so I can fit two
xterms (with 80 columns each) beside each other.

Best regards
   Oliver

PS:  For those interested, this is my xterm wrapper script:

#!/bin/sh -

if [ -z "$DISPLAY" ]; then
        echo "Sorry, \$DISPLAY is not set."
        exit 1
fi

WIDTH=$(xwininfo -root | awk '/Width:/{print $2}')

if [ -z "$WIDTH" ]; then
        echo "Sorry, my \$DISPLAY doesn't work ($DISPLAY)."
        exit 1
fi

if   [ $WIDTH -gt 1440 ]; then FONT=9x15bold
elif [ $WIDTH -gt 1280 ]; then FONT=8x13bold
elif [ $WIDTH -gt 1120 ]; then FONT=7x13bold
elif [ $WIDTH -gt  960 ]; then FONT=6x13
else                           FONT=5x8   # Ugh!
fi

exec /usr/X11R6/bin/xterm -fn "$FONT" -sl 10000 "$@"


-- 
Oliver Fromme -- Bunsenstr. 13 -- 81735 Muenchen -- Germany

``All that we see or seem is just a dream within a dream.''
(E. A. Poe)





More information about the Users mailing list