---
name: "atf-sh"
section: "1"
platform: "linux"
package: "atf-sh"
version: "0.22-3"
release: "Debian 13 (Trixie)"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/atf-sh"
---

# atf-sh(1)

interpreter for shell-based test programs

## NAME

**atf-sh** – interpreter for shell-based test programs

## SYNOPSIS

**atf-sh** \[**-s** *shell*\] *script*

## DESCRIPTION

**atf-sh** is an interpreter that runs the test program given in *script* after loading the [atf-sh(3)](/atf-sh/3.md) library.

**atf-sh** is not a real interpreter though: it is just a wrapper around the system-wide shell defined by *ATF\_SHELL*. **atf-sh** executes the interpreter, loads the [atf-sh(3)](/atf-sh/3.md) library and then runs the script. You must consider **atf-sh** to be a POSIX shell by default and thus should not use any non-standard extensions.

The following options are available:

- **-s** *shell*

  Specifies the shell to use instead of the value provided by *ATF\_SHELL*.

## ENVIRONMENT

- *ATF\_LIBEXECDIR*

  Overrides the builtin directory where **atf-sh** is located. Should not be overridden other than for testing purposes.

- *ATF\_PKGDATADIR*

  Overrides the builtin directory where *libatf-sh.subr* is located. Should not be overridden other than for testing purposes.

- *ATF\_SHELL*

  Path to the system shell to be used in the generated scripts. Scripts must not rely on this variable being set to select a specific interpreter.

## EXAMPLES

Scripts using [atf-sh(3)](/atf-sh/3.md) should start with:

```
#! /usr/bin/env atf-sh
```

Alternatively, if you want to explicitly choose a shell interpreter, you cannot rely on [env(1)](/env/1.md) to find **atf-sh**. Instead, you have to hardcode the path to **atf-sh** in the script and then use the **-s** option afterwards as a *single* *parameter*:

```
#! /path/to/bin/atf-sh -s/bin/bash
```

## SEE ALSO

[atf-sh(3)](/atf-sh/3.md)
