screen-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: multi-window searching, newer screen versions


From: Aaron Davies
Subject: Re: multi-window searching, newer screen versions
Date: Sat, 13 Aug 2011 22:47:10 -0400

On Aug 13, 2011, at 4:46 AM, Artur Skonecki wrote:

> #!/bin/sh
> # screen_hardcopy.sh
> # print window scrollbacks from all GNU Screen sessions
> # it breaks when session names contain spaces *sigh*
> 
> SCREENDIR=/tmp/screens/S-$USER
> HARDCOPYDIR=/tmp/screen-hardcopy-$USER
> 
> mkdir -p $HARDCOPYDIR
> 
> for session in $SCREENDIR/*
> do
>    session=$(basename "$session")
>    mkdir -p "$HARDCOPYDIR/$session"
>    screen -S "$session" -X eval "hardcopydir '$HARDCOPYDIR/$session'" "at 
> '\#' hardcopy -h"
> done
> 
> for session in $SCREENDIR/*
> do
>    session="$(basename "$session")"
>    for hardcopy in $HARDCOPYDIR/$session/*
>    do
>        winnum=$(echo "$(basename $hardcopy)" | cut -d '.' -f 2)
>        sed "s/.*/$session : $winnum &/" "$hardcopy"
>        rm "$hardcopy"
>    done
>    rmdir "$HARDCOPYDIR/$session"
> done
> 
> rmdir "$HARDCOPYDIR"

nice first cut, but doesn't work on the stock copy of screen apple ships with 
snow leopard macs (Screen version 4.00.03 (FAU) 23-Oct-06)

first problem is session files go in some pseudo-secure /var space with a 
randomized name; i hacked up this to find them:

case $(uname) in
   Darwin) SCREENDIR=$(for w in $(screen -ls|tr -d \\r|cat -v|grep .|tail -1); 
do echo $w; done|tail -1|sed 's/.$//');;
   *)      /tmp/screens/S-$USER;;
esac

(why on earth are there CRs in the output of "screen -ls"?!?)

second is that this screen wants "at" to take an argument of "#", not "\#"

third is that this screen interprets "hardcopy -h" as "write a hardcopy of the 
current screen (without scrollback) to a file named "-h" (relative to screen's 
pwd). i'm not entirely sure how to fix that one, as i'm not sure how to get the 
number of windows in a screen back out to the script. (otherwise the 
brute-force way would be to iterate over them, generating the name variations 
myself.)

(i was originally going to try to fix the spaces issue, but got stuck on 
getting it to work at all....)
-- 
Aaron Davies
address@hidden



reply via email to

[Prev in Thread] Current Thread [Next in Thread]