---
name: "slsh"
section: "1"
platform: "linux"
package: "slang"
version: "2.3.3-4"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/slsh"
---

# slsh(1)

Interpreter for S-Lang scripts

## NAME

slsh - Interpreter for S-Lang scripts

## SYNOPSIS

**slsh** \[ **--help** \] \[ **--version** \] \[ **-g** \] \[ **-n** \] \[ **--init** *file* \] \[ **--no-readline** \] \[ **-e** *string* \] \[ **-i** \] \[ **-q, --quiet** \] \[ **-t** \] \[ **-v** \] \[ **-\|***script-file args...* \]

## DESCRIPTION

**slsh** is a simple program for interpreting S-Lang scripts.  It supports dynamic loading of S-Lang modules and includes a readline interface for interactive use.

## OPTIONS

- **--help**

  Show a summary of options

- **--version**

  Show **slsh** version information

- **-g**

  Compile with debugging code, tracebacks, etc

- **-n**

  Don't load the personal initialization file

- **--init** *file*

  Use this file instead of ~/.slshrc

- **--no-readline**

  Do not use a readline interface for the interactive mode

- **-e** *string*

  Execute \`\`string'' as S-Lang code.

- **-i**

  Force interactive mode.  Normally **slsh** will go into interactive mode if both stdin and stdout are attached to a terminal.

- **-q, --quiet**

  Startup quietly by not printing the version and copyright information.

- **-t**

  Normally, **slsh** will call slsh\_main if it is defined.  This option prevents that from happening making it useful for checking for syntax error.

- **-v**

  Show verbose loading messages.  This is useful for seeing what files are being loaded.

## INITIALIZATION

Upon startup, the program will try to load *slsh.rc* as follows. If either SLSH\_CONF\_DIR or SLSH\_LIB\_DIR environment variables exist, then **slsh** will look look in the corresponding directories for *slsh.rc*. Otherwise it will look in:

*$(prefix)/etc/*   (as specified in the Makefile)

*/usr/local/etc/*

*/usr/local/etc/slsh/*

*/etc/*

*/etc/slsh/*

The *slsh.rc* file may load other files from slsh's library directory in the manner described below.

Once *slsh.rc* has been loaded, **slsh** will load $HOME/.slshrc if present.  Finally, it will load the script specified on the command line.  If the name of the script is -, then it will be read from stdin.  If the script name is not present, or a string to execute was not specified using the -e option, then **slsh** will go into interactive mode and read input from the terminal.  If the script is present and defines a function called slsh\_main, that function will be called.

## LOADING FILES

When a script loads a file via the built-in evalfile function or the require function (autoloaded by slsh.rc), the file is searched for along the SLSH\_PATH as specified in the Makefile.  An alternate path may be specified by the SLSH\_PATH environment variable.

The search path may be queried and set during run time via the get\_slang\_load\_path and set\_slang\_load\_path functions, e.g.,

```
   set_slang_load_path ("/home/bill/lib/slsh:/usr/share/slsh");
```

## INTERACTIVE MODE

When **slsh** is invoked without a script or is given the **-i** command line argument, it will go into into interactive mode.  In this mode, the user will be prompted for input.  The program will leave this mode and exit if it sees an EOF (Ctrl-D) or the user exits by issuing the quit command.

If an uncaught exception occurs during execution of a command, the error message will be shown and the user will be prompted for more input.

Any objects left on the stack after a command will be printed and the stack cleared.  This makes interactive mode useful as a calculator, e.g.,

```
     slsh> 3*10;
     30
     slsh> x = [1:20];
     slsh> sum (sin(x)-cos(x));
     0.458613
     slsh> quit;
```

Note that in this mode, variables are automatically declared.

The interactive mode also supports command logging.  Logging is enabled by the start\_log function.  The stop\_log function will turn off logging.  The default file where logging information will be written is *slsh.log*.  An alternative may be specified as an optional argument to the start\_log function:

```
     slsh> start_log;
     Logging input to slsh.log
        .
        .
     slsh> stop_log;
     slsh> start_log("foo.log");
     Logging input to foo.log
        .
        .
     slsh> stop_log;
     slsh> start_log;
     Logging input to foo.log
```

Similarly, the save\_input function may be used to save the previous input to a specified file:

```
     slsh> save_input;
     Input saved to slsh.log
     slsh> save_input ("foo.log");
     Input saved to foo.log
```

As the above examples indicate, lines must end in a semicolon.  This is a basic feature of the language and permits commands to span multiple lines, e.g.,

```
     slsh> x = [
            1,2,3,
            4,5,6];
     slsh> sum(x);
```

For convenience some users prefer that commands be automatically terminated with a semicolon.  To have a semicolon silently appended to the end of an input line, put the following in *$HOME/.slshrc* file:

```
    #ifdef __INTERACTIVE__
    slsh_append_semicolon (1);
    #endif
```

The interactive mode also supports shell escapes.  To pass a command to the shell, prefix it with !, e.g.,

```
    slsh> !pwd
    /grandpa/d1/src/slang2/slsh
    slsh> !cd doc/tm
    slsh> !pwd
    /grandpa/d1/src/slang2/slsh/doc/tm
```

Finally, the interactive mode supports a help and apropos function:

```
    slsh> apropos list
    apropos list ==>
    List_Type
    list_append
    list_delete
       .
       .
    slsh> help list_append
    list_append
     SYNOPSIS
       Append an object to a list
     USAGE
       list_append (List_Type, object, Int_Type nth)
       .
       .
```

For convenience, the help and apropos functions do not require the syntactic constraints of the other functions.

## READLINE HISTORY MECHANISM

By default, **slsh** is built to use the S-Lang readline interface, which includes a customizable command completion and a history mechanism. When **slsh** (or any S-Lang application that makes use of this feature) starts in interactive mode, it will look for a file in the user's home directory called *.slrlinerc* and load it if present.  This file allows the user to customize the readline interface and enable the history to be saved between sessions.  As an example, here is a version of the author's *.slrlinerc* file:

```
     % Load some basic functions that implement the history mechanism
     () = evalfile ("rline/slrline.rc");
     % The name of the history file -- expands to .slsh_hist for slsh
     RLine_History_File = "$HOME/.${name}_hist";
     % Some addition keybindings.  Some of these functions are defined
     % in rline/editfuns.sl, loaded by rline/slrline.rc
     rline_unsetkey ("^K");
     rline_setkey ("bol",   "^B");
     rline_setkey ("eol",   "^E");
     rline_setkey (&rline_kill_eol,  "^L");
     rline_setkey (&rline_set_mark,  "^K^B");
     rline_setkey (&rline_copy_region, "^Kk");
     rline_setkey (&rline_kill_region, "^K^V");
     rline_setkey (&rline_yank,  "^K^P");
     rline_setkey ("redraw",   "^R");
     #ifexists rline_up_hist_search
     % Map the up/down arrow to the history search mechanism
     rline_setkey (&rline_up_hist_search, "\e[A");
     rline_setkey (&rline_down_hist_search, "\e[B");
     #endif
     #ifexists rline_edit_history
     rline_setkey (&rline_edit_history, "^Kj");
     #endif
     % Add a new function
     private define double_line ()
     {
        variable p = rline_get_point ();
        variable line = rline_get_line ();
        rline_eol ();
        variable pend = rline_get_point ();
        rline_ins (line);
        rline_set_point (pend + p);
     }
    rline_setkey (&double_line,  "^K^L");
```

## MISCELLANEOUS SCRIPTS

Several useful example scripts are located in *$prefix/share/slsh/scripts/*, where $prefix represents the **slsh** installation prefix (*/usr*, */usr/local*,...).  These scripts include:

- **sldb**

  A script that runs the S-Lang debugger.

- **jpegsize**

  Reports the size of a jpeg file.

- **svnsh**

  A shell for browsing an SVN repository.

## AUTHOR

The principal author of **slsh** is John E. Davis \<www.jedsoft.org\>. The interactive mode was provided by Mike Noble.  The S-Lang library upon which **slsh** is based is primarily the work of John E. Davis with help from many others.

This manual page was originally written by Rafael Laboissiere for the Debian system (but may be used by others).

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License, Version 2 any later version published by the Free Software Foundation.

On Debian systems, the complete text of the GNU General Public License can be found in */usr/share/common-licenses/GPL*
