Hack35.Use script to Save Yourself Time and Train Others


Hack 35. Use script to Save Yourself Time and Train Others

The standard script command ensures repeatability and lends itself nicely to training junior admins.

If you took computer science courses in college, you may have run into the script command before. Professors often want you to hand in the entire contents of an interactive shell session with assignments, so what students often do is simply run script as the first command of their session. That copies all IO taking place in the terminal to a file (named, by default, typescript). When they're done, they just type exit, and they can then turn in the typescript file to the professor.

script has some uses beyond the classroom as well, though. In some stricter production environments, everything that gets done to non-testing, full-production systems has to be "repeatable"in other words, scripted, thoroughly tested, and documented to the point that someone in change management, with no training in Unix, can do it. One tool that can be used to create the documentation is script. You'll still have to script your procedure into oblivion, using the corporate coding standard, but then you can actually record a session where you invoke the tool and hand it over to the change management personnel, so they can see exactly what they need to do, in order.

One extremely cool feature of the script command is that it can output timing information to a separate file. The entire terminal session can then be replayed later using the scriptreplay command, and it will be replayed using the same timing as the original session! This is great for newer users who have a hard time remembering how to perform tasks that you don't have time to script for them.

Here's a quick session using the two commands:

 $ script -t 2> timing Script started, file is typescript $ ls Desktop hax hog.sh My Computer ostg src $ pwd /home/jonesy $ file hax hax: empty $ exit exit Script done, file is typescript $ scriptreplay timing $ ls Desktop hax hog.sh My Computer ostg src $ pwd /home/jonesy $ file hax hax: empty $ exit exit 

Using the -t flag tells the script command to output all timing information to standard error, so we redirect that to a file (here, timing) so that we can use it later. We then call scriptreplay, feeding it the timing file. We don't have to tell it where the actual session output is in this case, because it looks for a file named typescript by default, which also happens to be the default session output file for the script command.

Note that every keystroke is recorded, so if you mess up and hit backspace to delete a few characters, that'll show up in the replay of the session! Also note that replaying a session is only guaranteed to work properly on the terminal where the original session output file was created.

If you want a more "real-time" approach to showing someone how to get things done, there's another way script can help. Create a named pipe and redirect all output to the pipe. Someone else, logged in remotely, can then cat the pipe and see what's going on while it's happening.

Here's how it works. First, create a named pipe with mkfifo:

 $ mkfifo  out  

Then run script with the -f flag, which will flush all output to your pipe on every write. Without that flag, things won't work. The last argument to script is the file to which the output should be sent:

  $ script -f  out  

You're now in a session that looks and acts completely normal, but someone else can log in from elsewhere and run the following command to watch the action:

 $ cat  out  

Everything will be shown to that user as it happens. This is a little easier than remembering how to set up multi-user screen sessions!

4.8.1. See Also

  • "Disconnect Your Console Without Ending Your Session" [Hack #34]



Linux Server Hacks (Vol. 2)
BSD Sockets Programming from a Multi-Language Perspective (Programming Series)
ISBN: N/A
EAN: 2147483647
Year: 2003
Pages: 162
Authors: M. Tim Jones

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net