SHL(1)

NAME
shl - shell layer manager

SYNOPSIS
shl

DESCRIPTION
shl provides a method to handle multiple shells in parallel on a single terminal. Each shell is put in its own session and has its own controlling pseudo-terminal. At a time, one shell layer can receive input, but output is multiplexed from all layers. When the SWTCH key (assigned to ^Z at startup if unset) is pressed, shl takes control over the terminal and allows the user to manage layers. The prompt >>> is used by shl when commands may be entered.

  Definitions
Commands and arguments are separated by spaces or tabs and terminated by a new-line. A layer name consists of printable characters other than space, tab, or new-line. Only the first eight characters are significant.

  Commands
The following commands may be entered at the shl prompt; any unique prefix is accepted.

create [-[name] | name [command]]
    Create a new layer that has the specified name. If name is omitted, it is taken from an internal counter and formed as (digit). A name may later be referenced with or without these braces. If name begins with -, a login shell is started, that is, the first argument to the shell begins with -, too. An optional command can be executed instead of the shell. The shell prompt variable PS1 is set to the name of the layer followed by a space character.

name [oldname] newname
    Rename the layer oldname or the current layer to newname.

! [command]
    Execute command or the default shell in a subshell on the same terminal device as shl operates on. Switching between layers is not possible until the command terminates.

block name [name ...]
    Block output of the given layers when they are not current layers.

delete name [name ...]
    Delete the given layers, that is, send a SIGHUP to each process group.

help (or ?)
    Print the syntax of all shl commands.

layers [-l] [name ...]
    For each given layer, or for all layers, print the layer name and its process group. If the -l option is present, a ps(1)-like output format is used.

resume [name]
    Resume the specified layer, or the last current layer.

toggle
    Resume the previous current layer to that of the current layer.

unblock name [name ...]
    Unblock output of the given layers.

quit
    Quit shl and send a SIGHUP signal to all remaining layers.

name
    Resume the specified layer. Any unique name prefix is accepted.

ENVIRONMENT VARIABLES

SHELL
    Default shell program.

SYSV3
    Causes the text of some messages to be changed.

SEE ALSO
ps(1), sh(1), stty(1), termio(7I)

NOTES
This shl implementation uses regular pseudo terminals and thus works slightly different than the original System V one.

The block command will not suspend a layer from execution immediately. The layer will continue to run until the pseudo terminal's buffer is filled. This can lead to lots of output once the layer is resumed or unblocked.

The loblk setting of stty(1) is not honored.

While pseudo-terminal settings are an attribute of a specific layer, terminal states set by escape sequences are not and can cause unpredictable results when layers are switched. It might be better to stop or quit screen-handling programs on some output devices.