---
name: "shtool-platform"
section: "1"
platform: "linux"
package: "shtool"
version: "2.0.8-10"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/shtool-platform"
---

# shtool-platform(1)

GNU shtool Unix platform identification

## NAME

shtool-platform - GNU shtool Unix platform identification

## SYNOPSIS

**shtool platform** \[**-F**\|**--format** *format*\] \[**-S**\|**--sep** *string*\] \[**-C**\|**--conc** *string*\] \[**-L**\|**--lower**\] \[**-U**\|**--upper**\] \[**-v**\|**--verbose**\] \[**-c**\|**--concise**\] \[**-n**\|**--newline**\] \[**-d**\|**--debug**\] \[**-t**\|**--type** *type*\] \[**-n**\|**--newline**\] \[**-d**\|**--debug**\]

## DESCRIPTION

**shtool platform** is a flexible Unix platform identification program. It distinguishes a platform according to its *hardware architecture* and *operating system*. For both there is a *class*, *product* and *technology* identification. For each of those six identifications, there is a *verbose*, *regular* and *concise* version.

This leads to eighteen (2x3x3) available identification strings for each platform, from which usually 2 are chosen in a particular situation. This is done by assembling the platform identification string using a *format* string containing one or more identification constructs of the forms "`"%[xx]"`" (verbose), "`"%{xx}"`" (regular) and "`"%<xx>"`" (concise).

## OPTIONS

The following command line options are available.

- **-F**, **--format** *format*

  This option controls the output formatting of this program. It is a plain-text string with the "`"%"`*xx*" constructs which expand to the various platform information strings. "`"%{"`*xx*`"}"`" is the canonical regular version of the information. "`"%["`*xx*`"]"`" is the verbose version of the information. "`"%<"`*xx*`">"`" is the concise version of the information. In total, the following constructs are available for expansion:

  ```
   %[ac]    verbose hardware architecture class
   %{ac}    regular hardware architecture class
   %<ac>    concise hardware architecture class
   %[ap]    verbose hardware architecture product
   %{ap}    regular hardware architecture product
   %<ap>    concise hardware architecture product
   %[at]    verbose hardware architecture technology
   %{at}    regular hardware architecture technology
   %<at>    concise hardware architecture technology
   %[sc]    verbose operating system class
   %{sc}    regular operating system class
   %<sc>    concise operating system class
   %[sp]    verbose operating system product
   %{sp}    regular operating system product
   %<sp>    concise operating system product
   %[st]    verbose operating system technology
   %{st}    regular operating system technology
   %<st>    concise operating system technology
  ```

  The default *format* string is "`"%{sp} (%{ap})"`", providing the regular operating system and hardware architecture product information.

- **-S**, **--sep** *string*

  This option sets the word *separation* string for the platform information strings. By default it is "`" "`" (whitespace). It is especially used for separating the operating system name and the operating system version.

- **-C**, **--conc** *string*

  This option sets the word *concatenation* string for the platform information strings. By default it is "`"/"`". It is especially used to concatenate multiple parts in operating system name and version parts.

- **-L**, **--lower**

  This options enforces conversion of the output to all *lower* case.

- **-U**, **--upper**

  This options enforces conversion of the output to all *upper* case.

- **-v**, **--verbose**

  This option enforces verbose versions of all expansion constructs in *format* string of option **-F**. It is equal to specifying all expansion constructs as "`"%["`*xx*`"]"`".

- **-c**, **--concise**

  This option enforces concise versions of all expansion constructs in *format* string of option **-F**. It is equal to specifying all expansion constructs as "`"%<"`*xx*`">"`".

- **-n**, **--no-newline**

  This option omits the usual trailing newline character in the output.

- **-t**, **--type** *type*

  This option is a meta option which internally sets options **-F**, **-S**, **-C**, **-L**, **-U**, **-v** or **-c** according to *TYPE*. It can be used to easily specify various commonly known outputs. The following *TYPE*s are available:

  - **binary**

    Binary Package Id (OpenPKG RPM). This is equal to "`"-F '%<ap"`-%\<sp\>' -L -S '' -C '+'\>" and results in outputs like "`"ix86-freebsd4.9"`" and "`"ix86-debian3.0"`".

  - **build**

    Build-Time Checking (OpenPKG RPM). This is equal to "`"-F '%<at"`-%\<st\>' -L -S '' -C '+'\>" and results in outputs like "`"i686-freebsd4.9"`" and "`"i586-linux2.4"`".

  - **gnu**

    GNU *config.guess* Style Id. This is similar to **build** and is equal to "`"-F '"%<at"`-unknown-%\<st\>' -L -S '' -C '+'\>" and results in outputs like "`"i686-unknown-freebsd4.9"`" and "`"i586-unknown-linux2.4"`".

  - **web**

    HTTP Server Header Id. This is equal to "`"-F '"%<sp"`-%\<ac\>' -S '/' -C '+'\>" and results in outputs like "`"FreeBSD/4.9-iX86"`" and "`"Debian/3.0-iX86"`".

  - **summary**

    Human Readable Verbose Summary Information. This is equal to "`"-F` `'Class: %[sc] (%[ac])\nProduct: %[sp] (%[ap])\nTechnology: %[st]` `(%[at])' -S ' ' -C '/'"`" and results in outputs like:

    ```
     Class:      4.4BSD (iX86)
     Product:    FreeBSD 4.9-RC (iX86)
     Technology: FreeBSD 4.9-RC (i686)
    ```

    and

    ```
     Class:      LSB (iX86)
     Product:    Debian GNU/Linux 3.0 (iX86)
     Technology: GNU/Linux 2.2/2.4 (i686)
    ```

  - **all-in-one**

    All-In-One Full-Table Information. This just outputs really all 2x2x3 identification strings as a table.

- **-d**, **--debug**

  This option enables some internal debugging messages.

- **-V**, **--version**

  This option outputs the version information of **shtool platform** only.

- **-h**, **--help**

  This option outputs the usage information of **shtool platform** only.

## EXAMPLE

The following real-life use cases are known:

- **OpenPKG** build-time decisions

  ```
   $ platform -c -L -S "" -C "+" -F "%at-%st"
   $ platform -c -L -S "" -C "+" -F "%ac-%sc"
  ```

- **OpenPKG** binary RPM packages

  ```
   $ platform -c -L -S "" -C "+" -F "%ap-%sp"
  ```

- *README* files

  ```
   $ platform -v -F "%sp (%ap)"
   $ platform -v -F "%sc (%ac)"
  ```

- Debugging

  ```
   $ platform --type=all-in-one
  ```

## SUPPORT

**shtool platform** currently knows the following particular Unix platforms in detail: FreeBSD, NetBSD, OpenBSD, Linux, Sun Solaris, SCO UnixWare, QNX Neutrino, SGI IRIX, HP HP-UX, HP Tru64, IBM AIX and Apple Mac OS X Darwin.

All other Unix platforms are recognized through generic [**uname**(1)](/uname/1.md) information and so usually can be identified sufficiently, although the identification might be not as precise as possible.

## HISTORY

**shtool platform** was implemented in September 2003 by *Ralf S.* *Engelschall* for use in the **OSSP** and **OpenPKG** projects. It was prompted by the need in **OpenPKG** to have both product (for RPM filenames) and technology (for build-time decisions) identifiers for the Unix platforms, OpenPKG packages are maintained for. It was inspired by the **GNU** *config.guess* and the old **GNU shtool** *guessos* command.

The major difference to **GNU** *config.guess* is that **shtool platform** does not use a *vendor* identification (cannot be determined most of the time and is not used at all in all projects I've ever seen) and is a lot more flexible (class, product and technology identifications combined with verbose, regular and concise outputs). The drawback of **shtool platform** is that it (still) knows less particular platforms, although the generic platform identification is sufficient enough most of the time.

## SEE ALSO

[**uname**(3)](/uname/3.md), GNU *config.guess*.
