---
name: "cleo"
section: "1p"
platform: "linux"
package: "cleo"
version: "0.004-4"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/cleo"
---

# cleo(1p)

Play back shell commands for live demonstrations

## NAME

cleo - Play back shell commands for live demonstrations

## SYNOPSIS

```
    cleo COMMAND_FILE
```

## DESCRIPTION

`"cleo"` is a utility for playing back pre-recorded shell commands in a live demonstration.  `"cleo"` displays the commands as if you had actually typed them and then executes them interactively.

There is probably an easy way to do this with `"expect"` or a similar tool. But I couldn't figure it out, so I built this.  Your mileage may vary.

## PLAYBACK

`"cleo"` always pauses and waits for a keypress before displaying a command and before executing it.  Pressing any key besides those listed below will advance the playback:

```
  Key                       Action
  ------------------------------------------------------------------
  s                         skip the current command
  r                         redo the current command
  p                         redo the previous command
  q                         quit playback
```

## COMMANDS

`"cleo"` reads commands from a file.  Each line is treated as one command. Blank lines and those starting with `"#"` will be ignored.  The commands themselves can be anything that you would type into an interactive shell. You can also add a few special tokens that `"cleo"` recognizes:

- "!!!"

  Commands starting with `"!!!"` (three exclamation points) are not displayed and will be executed immediately. This is useful for running setup commands at the beginning of your demonstration.

- "%%%"

  Within a command, `"%%%"` (three percent signs) will cause `"cleo"` to pause and wait for a keypress before displaying the rest of the command.  This is useful if you want to stop in the middle of a command to give some explanation.

Otherwise, `"cleo"` displays and executes the commands verbatim.  Note that some interactive commands like `"vim"` are picky about STDOUT and STDIN.  To make them work properly with `"cleo"`, you may need to force them to attach to the terminal like this:

```
    (exec < /dev/tty vim)
```

## EXAMPLE

I use this for giving demonstrations of pinto, such as the one seen at \<https://www.youtube.com/watch?v=H-JkFXm8Xgk\> (the live demonstration part starts around 10:47).

The command file that I use for that presentation is included inside this distribution at *examples/pinto.demo*.  This file is for illustration only, so don't expect it to actually work for you.

## LIMITATIONS

`"cleo"` only works on Unix-like platforms.  It may work on Windows if you use Cygwin.  Personally, I have only used `"cleo"` on Mac OS X.

## TODO

- Jump to arbitrary command number

  - Support backspacing in recorded command

  - Support multi-line recorded commands

  - Write unit tests

  ## AUTHOR

Jeffrey Ryan Thalhammer \<thaljef@cpan.org\>

## COPYRIGHT

Copyright (c) 2014, Imaginative Software Systems
