What's new? | Help | Directory | Sign in
Google
  
  
  
  
    
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
#!/bin/sh

SCREENTMP="SCREENTMP_$(basename $0).$$"
SLEEP=.2
export SLEEP

SHOULD_OUTPUT_DIR=0
if [ -z "$OUTDIR" ] ; then
OUTDIR="$(mktemp -d)"
SHOULD_OUTPUT_DIR=1
export OUTDIR
fi

if [ ! -d "$OUTDIR" ] ; then
echo "Output directory target is not a directory: $OUTDIR"
exit 1
fi

log() {
[ ! -z "$DEBUGHARDCOPY" ] && echo "$$: $@" >&2
}

tmpscreen() {
screen -S $SCREENTMP -p 0 -d -m

while true; do
CAPSTY="$(screen -ls | grep -F $SCREENTMP | awk '{print $1}')"
if [ -z "$CAPSTY" ] ; then
log "Failure to find capture screen: $CAPSTY / $SCREENTMP"
else
break;
fi
sleep $SLEEP
done
echo $CAPSTY
}

quitscreen() {
CAPSTY=$1
if [ -z "$CAPSTY" ] ; then
echo "No sty given to quit"
return 1
fi

STY=$CAPSTY screen -X quit
}

_hardcopy() {
_VIEWSTY=$1
_WINDOW=$2
_OUT=$3

log "_hardcopy args: $*"

log "Trying hardcopy on $_VIEWSTY:$_WINDOW > $_OUT"
for tries in 1 2 3; do
env STY=$_VIEWSTY screen -p $_WINDOW -X hardcopy $_OUT
for tries in 1 2 3 4 5; do
log "Calling filesize: '$_OUT'"
size="$(_filesize "$_OUT")"
[ "$size" -gt 0 ] && break 2
sleep $SLEEP
done
done
}

_mktemp() {
tmpfile=$(mktemp)
if [ -z "$tmpfile" ] ; then
log "mktemp failed."
return 1
fi

echo $tmpfile
}

_filesize() {
if [ -z "$1" ] ; then
log "No file given to _filesize"
exit 1
fi

stat $1 2> /dev/null \
| awk '/^[0-9]/ { print $1 }; /^ Size/ { print $2}' 2> /dev/null
}

windowlist() {
CAPSTY=$(tmpscreen)
VIEWSTY=$1

if [ -z "$VIEWSTY" ] ; then
log "No screen sty given."
return 1
fi

OUT="$OUTDIR/$VIEWSTY:p"
STY=$CAPSTY screen -X screen screen -p = -x $VIEWSTY
for tries in 1 2 3 ; do
log windowlist: _hardcopy $CAPSTY 1 $OUT
_hardcopy $CAPSTY 1 $OUT
for tries in 1 2 3 ; do
if grep -vq '^ *$' "$OUT" ; then
break 2
fi
sleep $SLEEP
done
done

quitscreen $CAPSTY

sed -i -e '1d; /^ *$/d' $OUT
cat $OUT
}

dumpwindows() {
VIEWSTY=$1

if [ -z "$VIEWSTY" ] ; then
log "No screen sty given."
return 1
fi

for W in $(windowlist $VIEWSTY | awk '{print $1}') ; do
log "Dumping window $VIEWSTY:$W"
HARDOUT="$OUTDIR/$VIEWSTY:$W"
log dumpwindows: _hardcopy $VIEWSTY $W $HARDOUT
_hardcopy $VIEWSTY $W $HARDOUT
done
}

catout() {
for f in $(ls -d $OUTDIR/*) ; do
sed -e "s,^,$f: ," $f
done
}

if [ "$#" -eq 0 ] ; then
echo "Usage: $0 <screen>"
exit 1
fi

if [ -z "$OUTDIR" -o ! -d "$OUTDIR" ] ; then
log "mktemp -d failed."
exit 1
fi

dumpwindows $1

if [ "$SHOULD_OUTPUT_DIR" -eq 1 ] ; then
echo $OUTDIR
fi
Show details Hide details

Change log

r1952 by jordansissel on Jul 07, 2008   Diff
- Output the target directory if OUTDIR
was not present in environment
- Fix sed -ie -> sed -i -e
- Make sleep longer.
Go to: 
Project members, sign in to write a code review

Older revisions

r1951 by jordansissel on Jul 07, 2008   Diff
- Make debug logging optional
r1950 by jordansissel on Jul 07, 2008   Diff
- Make a SLEEP variable so I can tweak
the sleep delays globally.
- Call egrep when necessary
- Added proper option parsing
- New search abilities:
...
r1949 by jordansissel on Jul 07, 2008   Diff
- Add screen session multiwindow
screen scraping.
  Both of these scripts must be in
your $PATH

...
All revisions of this file

File info

Size: 2648 bytes, 151 lines

File properties

svn:executable
*