[RndTbl] UNIX command transcript with canned input, echoed in output?

Adam Thompson athompso at athompso.net
Fri Nov 25 14:55:23 CST 2011


> -----Original Message-----
> From: roundtable-bounces at muug.mb.ca [mailto:roundtable-
> bounces at muug.mb.ca] On Behalf Of Gilbert E. Detillieux
> Sent: Friday, November 25, 2011 1:57 PM
> To: MUUG Roundtable
> Subject: [RndTbl] UNIX command transcript with canned input, echoed
> in output?
>
> Howdy folks!
>
> I got a request from a prof this morning that stumped this old UNIX
> hack.  He wants to run a UNIX command (for a language interpreter),
> using input from a file, and saving a transcript of the output.
> That much is trivial.  The catch is that he'd like the transcript to
> have the input echoed, as if it had been typed in at the tty.
>
> I've looked at options on the script command and ssh, but can't find
> a simple solution to this.  And it has to be simple enough for his
> students (who may not have much UNIX experience) to use.
>
> Any suggestions?


Seems like a strange thing to ask for - how would you discriminate between 
input and output, since they'd likely be interleaved?

Anyway, the best I can suggest is:

	tee copy-of-input < inputfile | interpreter 2>&1 | tee copy-of-output

which would leave you with two files.  Of course, this could be wrapped in 
a trivial function like:

	run_script() {
	  DATE=$( date +%F_%T.%N )
	  cat ${1:-} | tee "input-${DATE}" | interpreter 2>&1 | tee 
"output-${DATE}"
	}

in order to make it more easily accessible for novices.  Obviously this 
wouldn't work terribly well for interactive use due to buffering issues; 
if there were a --line-buffered option for tee(1) this could be workable 
but no such option exists in GNU tee.

-Adam





More information about the Roundtable mailing list