File: pconsole.sh.in

package info (click to toggle)
pconsole 1.0-8
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 536 kB
  • ctags: 88
  • sloc: ansic: 870; sh: 289; makefile: 121
file content (160 lines) | stat: -rw-r--r-- 3,582 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#! /bin/sh
#
#   pconsole WJ101
#   Copyright (C) 2001  Walter de Jong <walter@heiho.net>
#
#   This program is free software; you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation; either version 2 of the License, or
#   (at your option) any later version.
#
#   This program is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details.
#
#   You should have received a copy of the GNU General Public License
#   along with this program; if not, write to the Free Software
#   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
#	pconsole.sh	WJ101
#
#	Open windows and have pconsole attach to them
#	NOTE: ssh is weird and it doesn't work without the ssh.sh wrapper script
#

# Change to "1" or "yes" to enable debugging
DEBUG=""

if [ ! -z "${DEBUG}" ]
then
	set -x
fi

PATH=/bin:/usr/bin:/usr/bin/X11:/usr/openwin/bin:/usr/local/bin:/usr/bsd:/usr/share/bin:/opt/bin:/etc:/usr/etc

prefix=@prefix@
exec_prefix=@exec_prefix@
bindir=@bindir@

#
#	options: you can overrule these by setting them in your environment
#
if [ -z "${P_TERM}" ]
then
	P_TERM=xterm
fi
if [ -z "${P_TERM_OPTIONS}" ]
then
	P_TERM_OPTIONS="-geometry 40x12 -fn 5x7"
fi
if [ -z "${P_CONNECT_CMD}" ]
then
	P_CONNECT_CMD="${bindir}/ssh.sh"
fi
if [ -z "${P_CONSOLE_OPTIONS}" ]
then
	P_CONSOLE_OPTIONS="-geometry 60x12"
fi


#
#	get tty
#	Mind that ps output may be platform dependent
#	If so, you have to adjust this function
#
#	What it does is get the tty that has the parent pid equal to the pid of
#	the xterm we launched
#
function get_tty {
	if [ ! -z "${DEBUG}" ]
	then
		set -x
	fi

	PS_PERSONALITY=posix		# may be needed for GNU ps :P
	ps -ef 2>/dev/null | awk '{ print $3 " " $6 }' | egrep "^$1" | awk '{ print $2 }'
}


#
#	main
#
if [ -z "$1" ]
then
	PROG=`basename $0`
	echo "usage: ${PROG}" '<hostname>[:port] [...]'
	exit 1
fi

THIS_TTY=`tty`

#
#	run this in a sub-shell so the user gets the prompt back
#	We start all windows, give them some time to initialize, and then get all
#	ttys that have those (parent) pids
#	Then we combine the host#tty pairs, and give that to the pconsole binary
#
(
	if [ ! -z "${DEBUG}" ]
	then
		set -x
	fi

	HOSTLIST="$*"
	for HOST in ${HOSTLIST}
	do
# get optional port number
		PORT=`echo "${HOST}" | cut -d: -f2`
		HOSTNAME=`echo "${HOST}" | cut -d: -f1`
		if [ "${PORT}" = "${HOSTNAME}" ];
		then
			PORT=''
		fi

# open windows
		${P_TERM} ${P_TERM_OPTIONS} -title "pconsole: ${HOST}" -name "pconsole: ${HOST}" -e ${P_CONNECT_CMD} ${HOSTNAME} ${PORT} &
		PID=$!
		PIDLIST="${PIDLIST} ${PID}"
	done

	for PID in ${PIDLIST}
	do
		TTY=''
		while [ -z "${TTY}" ]
		do
			TTY=`get_tty "${PID}"`

# sometimes xterm is too slow forking off, and get_tty will give the same
# tty as we started from. This would be incorrect, and if so, we try again
			if [ "/dev/${TTY}" = "${THIS_TTY}" ];
			then
				TTY=''
				sleep 1
			fi
		done

		HOST=`echo ${HOSTLIST} | cut -d\  -f1`
		HOSTLIST=`echo ${HOSTLIST} | cut -d\  -f2-999`
		if [ ! -z "${HOST}" ]
		then
			TTYS="${TTYS} ${HOST}#/dev/${TTY}"
		else
			TTYS="${TTYS} /dev/${TTY}"
		fi
	done

# start pconsole
	${P_TERM} ${P_CONSOLE_OPTIONS} -title pconsole -name pconsole -e "${bindir}/pconsole" ${TTYS}

# terminate all open windows
	if [ ! -z "${PIDLIST}" ]
	then
		kill ${PIDLIST} >/dev/null 2>&1
	fi
	exit 0
) &

exit 0

# EOB