Generic_Window_Manager/contrib/rxterm/rxterm.script

136 lines
3.3 KiB
Bash
Executable File

#!/bin/sh
usage='Usage: rx <remhost> <X-command> [<args>]
rxterm <remhost> [<args>]
rxload <remhost> [<args>]
rxcmdtool <remhost> [<args>]
Executes <X-command> on <remhost> and redirects its standard and error output
to the file $HOME/.rx.log on <remhost>.
The connection to <remhost> terminates as soon as <X-command> is launched, not
when <X-command> terminates.
The user should have permission to use rsh from the current host to <remhost>
and to execute X clients on <remhost>. See rsh, xhost.
'
[ $# = 0 ] && { echo "$usage" >&2; exit 1; }
case $1 in
-* )
echo "$usage" >&2; exit 1;;
esac
remhost=$1; shift; comm="$*"
case $0 in
*rxload )
comm="xload $comm"
;;
*rxterm )
case $comm in
*-e* )
# Extract the entry name of the command to execute
name=`echo $comm | sed 's/.*-e[ ]*\([^ ]*\).*/\1/'`
if [ -z "$name" ]
then
echo "missing command name for -e switch"
exit 1
fi
name=`basename $name`@$remhost # Ex: emacs@mirsa
;;
* )
# Just the machine name
name=$remhost
;;
esac
# Always login shell!
comm="xterm -ls -T $name $comm"
;;
*rxcmdtool )
case $comm in
*-e* )
# Extract the entry name of the command to execute
name=`echo $comm | sed 's/.*-e[ ]*\([^ ]*\).*/\1/'`
if [ -z "$name" ]
then
echo "missing command name for -e switch"
exit 1
fi
name=`basename $name`@$remhost # Ex: emacs@mirsa
;;
* )
# Just the machine name
name=$remhost
;;
esac
# Always login shell!
comm="cmdtool -label $name $comm"
;;
esac
# Current Host
hostname=${HOSTNAME-`hostname || /usr/5bin/uname -n 2> /dev/null`}
[ -z "$DISPLAY" ] && DISPLAY=unix:0 # Default for DISPLAY
IFS=:
set $DISPLAY
IFS='
'
xhostname=$1 xscreen=$2
if [ -z "$xscreen" ]
then
xscreen=$xhostname
xhostname=$hostname
fi
[ "$xhostname" = unix ] && xhostname=$hostname
case $remhost in
*.*.* )
# May be a different domain: we have to find the full name of the xhostname
# Search for the name server, then N.I.S, then /etc/hosts
oldpath=$PATH
PATH=/usr/etc:/usr/ucb:/etc:/bin:/usr/bin:/usr/etc/yp
host=`(nslookup $xhostname) 2> /dev/null | \
sed -n 's/Name:[ ]*\(.*\)/\1/p'`
if [ -z "$host" ]
then
host=`(ypmatch $xhostname hosts) 2> /dev/null | \
sed -n 's/[^ ]*[ ]*\([^ ]*\).*/\1/p'`
fi
if [ -z "$host" ]
then
host=`sed -n /$xhostname/'s/[^ ]*[ ]*\([^ ]*\).*/\1/p' \
/etc/hosts`
fi
xhostname=$host
PATH=$oldpath
esac
# For efficiency, use of unix:0 for local clients
if [ "$xhostname" = "$remhost" ]
then
DISPLAY=unix:$xscreen
else
DISPLAY=$xhostname:$xscreen
fi
# Rshd open one file-descriptor (number 7 often) and does'nt terminate
# before it is closed!!!!
# List of variables to export through rsh if they are defined
vars='PATH DISPLAY XENVIRONMENT XAPPLRESDIR PRINTER LD_LIBRARY_PATH OPENWINHOME GUIDEHOME'
env= var= val=
for var in $vars
do
eval val=\$$var
[ -n "$val" ] && env="${env}$var=$val;export $var;"
done
xhost +$remhost > /dev/null
# Using rsh even localy permits to unattach the xcommand from the
# current tty if any
exec rsh $remhost -n "exec sh -c \" $env $comm < /dev/null > .rx.log 2>&1 \
3>&1 4>&1 5>&1 6>&1 7>&1 8>&1 9>&1 \
3>&- 4>&- 5>&- 6>&- 7>&- 8>&- 9>&- &\" "