---
name: "env"
section: "1"
platform: "linux"
package: "coreutils"
version: "9.12-2"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "freebsd", "openbsd", "macos"]
url: "https://new.carta.tech/env"
---

# env(1)

run a program in a modified environment

## NAME

env - run a program in a modified environment

## SYNOPSIS

**env** \[*OPTION*\]... \[*-*\] \[*NAME=VALUE*\]... \[*COMMAND* \[*ARG*\]...\]

## DESCRIPTION

Set each NAME to VALUE in the environment and run COMMAND.

Mandatory arguments to long options are mandatory for short options too.

- **-a, --argv0=ARG**

  pass ARG as the zeroth argument of COMMAND

- **-i, --ignore-environment**

  start with an empty environment

- **--env0-from=FILE**

  read NUL-delimited environment entries from FILE

- **-0, --null**

  end each output line with NUL, not newline

- **-u, --unset=NAME**

  remove variable from the environment

- **-C, --chdir=DIR**

  change working directory to DIR

- **-S, --split-string=S**

  process and split S into separate arguments; used to pass multiple arguments on shebang lines

- **--block-signal\[=SIG\]**

  block delivery of SIG signal(s) to COMMAND

- **--default-signal\[=SIG\]**

  reset handling of SIG signal(s) to the default

- **--ignore-signal\[=SIG\]**

  set handling of SIG signal(s) to do nothing

- **--list-signal-handling**

  list non default signal handling to standard error

- **-v, --debug**

  print verbose information for each processing step

- **--help**

  display this help and exit

- **--version**

  output version information and exit

A mere - implies **-i**.  If no COMMAND, print the resulting environment.

SIG may be a signal name like 'PIPE', or a signal number like '13'. Without SIG, all known signals are included.  Multiple signals can be comma-separated.  An empty SIG argument is a no-op.

### Exit status:

- 125

  if the env command itself fails

- 126

  if COMMAND is found but cannot be invoked

- 127

  if COMMAND cannot be found

- \-

  the exit status of COMMAND otherwise

## SCRIPT OPTION HANDLING

The **-S** option allows specifying multiple arguments in a script. Running a script named **1.pl** containing the following first line:

```
#!/usr/bin/env -S perl -w -T
...
```

Will execute **perl -w -T 1.pl**

Without the **'-S'** parameter the script will likely fail with:

```
/usr/bin/env: 'perl -w -T': No such file or directory
```

See the full documentation for more details.

## NOTES

POSIX's [**exec**(3p)](/exec/3p.md) pages says:

"many existing applications wrongly assume that they start with certain signals set to the default action and/or unblocked.... Therefore, it is best not to block or ignore signals across execs without explicit reason to do so, and especially not to block signals across execs of arbitrary (not closely cooperating) programs."

## AUTHOR

Written by Richard Mlynarik, David MacKenzie, and Assaf Gordon.

## REPORTING BUGS

Report bugs to: \<bug-coreutils@gnu.org\>.\
 Report any translation bugs to: \<https://translationproject.org/team/\>.\
 GNU coreutils home page: \<https://www.gnu.org/software/coreutils/\>\
 General help using GNU software: \<https://www.gnu.org/gethelp/\>

## COPYRIGHT

Copyright © 2026 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later \<https://gnu.org/licenses/gpl.html\>.\
 This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.

## SEE ALSO

[**sigaction**(2)](/sigaction/2.md), [**sigprocmask**(2)](/sigprocmask/2.md), [**signal**(7)](/signal/7.md)

Full documentation \<https://www.gnu.org/software/coreutils/env\>\
 or available locally via: info '(coreutils) env invocation'
