~nafallo/+junk/screen_ssh

« back to all changes in this revision

Viewing changes to screen_ssh.sh

  • Committer: Chris Jones
  • Date: 2011-08-20 23:05:39 UTC
  • Revision ID: cmsj@tenshu.net-20110820230539-94osll42gf82gweo
Initial commit

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/bin/bash
 
2
# screen_ssh.sh by Chris Jones <cmsj@tenshu.net>
 
3
# Released under the GNU GPL v2 licence.
 
4
# Set the title of the current screen to the hostname being ssh'd to
 
5
#
 
6
# usage: screen_ssh.sh $PPID hostname
 
7
#
 
8
# This is intended to be called by ssh(1) as a LocalCommand.
 
9
# For example, put this in ~/.ssh/config:
 
10
#
 
11
# Host *
 
12
#   LocalCommand /path/to/screen_ssh.sh $PPID %n
 
13
 
 
14
# If it's not working and you want to know why, set DEBUG to 1 and check the
 
15
# logfile.
 
16
DEBUG=0
 
17
DEBUGLOG="$HOME/.ssh/screen_ssh.log"
 
18
 
 
19
set -e
 
20
set -u
 
21
 
 
22
dbg ()
 
23
{
 
24
  if [ "$DEBUG" -gt 0 ]; then
 
25
    echo "$(date) :: $*" >>$DEBUGLOG
 
26
  fi
 
27
}
 
28
 
 
29
dbg "$0 $*"
 
30
 
 
31
# We only care if we are in a terminal
 
32
tty -s
 
33
 
 
34
# We also only care if we are in screen, which we infer by $TERM starting
 
35
# with "screen"
 
36
if [ "${TERM:0:6}" != "screen" ]; then
 
37
  dbg "Not a screen session, ${TERM:0:5} != 'screen'"
 
38
  exit
 
39
fi
 
40
 
 
41
# We must be given two arguments - our parent process and a hostname
 
42
# (which may be "%n" if we are being called by an older SSH)
 
43
if [ $# != "2" ]; then
 
44
  dbg "Not given enough arguments (must have PPID and hostname)"
 
45
  exit
 
46
fi
 
47
 
 
48
# We don't want to do anything if BatchMode is on, since it means
 
49
# we're not an interactive shell
 
50
set +e
 
51
grep -a -i "Batchmode yes" /proc/$1/cmdline >/dev/null 2>&1
 
52
RETVAL=$?
 
53
if [ "$RETVAL" -eq "0" ]; then
 
54
  dbg "SSH is being used in Batch mode, exiting because this is probably an auto-complete or similar"
 
55
  exit
 
56
fi
 
57
set -e
 
58
 
 
59
# Infer which version of SSH called us, and use an appropriate method
 
60
# to find the hostname
 
61
if [ "$2" = "%n" ]; then
 
62
  HOST=$(xargs -0 < /proc/$1/cmdline)
 
63
  dbg "Using OpenSSH 4.x hostname guess: $HOST"
 
64
else
 
65
  HOST="$2"
 
66
  dbg "Using OpenSSH 5.x hostname specification: $HOST"
 
67
fi
 
68
 
 
69
echo $HOST | sed -e 's/\.[^.]*\.[^.]*\(\.uk\)\{0,1\}$//' | awk '{ printf ("\033k%s\033\\", $NF) }'
 
70
 
 
71
dbg "Done."