ENV(1) User Commands ENV(1)

# [NAME](#NAME)

env - run a program in a modified environment

# [SYNOPSIS](#SYNOPSIS)

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

# [DESCRIPTION](#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**](#a,)

pass ARG as the zeroth argument of COMMAND

[**-i, --ignore-environment**](#i,)

start with an empty environment

[**--env0-from=FILE**](#env0)

read NUL-delimited environment entries from FILE

**-0, --null**

end each output line with NUL, not newline

[**-u, --unset=NAME**](#u,)

remove variable from the environment

[**-C, --chdir=DIR**](#C,)

change working directory to DIR

[**-S, --split-string=S**](#S,)

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

[**--block-signal\[=SIG\]**](#block)

block delivery of SIG signal(s) to COMMAND

[**--default-signal\[=SIG\]**](#default)

reset handling of SIG signal(s) to the default

[**--ignore-signal\[=SIG\]**](#ignore)

set handling of SIG signal(s) to do nothing

[**--list-signal-handling**](#list)

list non default signal handling to standard error

[**-v, --debug**](#v,)

print verbose information for each processing step

[**--help**](#help)

display this help and exit

[**--version**](#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:](#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](#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](#NOTES)

POSIX's [**exec**(3p)](/man/os/coreutils/exec.3p) 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](#AUTHOR)

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

# [REPORTING BUGS](#REPORTING_BUGS)

Report bugs to: &lt;bug-coreutils@gnu.org&gt;.  
Report any translation bugs to: &lt;https://translationproject.org/team/&gt;.  
GNU coreutils home page: &lt;https://www.gnu.org/software/coreutils/&gt;  
General help using GNU software: &lt;https://www.gnu.org/gethelp/&gt;

# [COPYRIGHT](#COPYRIGHT)

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

# [SEE ALSO](#SEE_ALSO)

[**sigaction**(2)](/man/os/coreutils/sigaction.2), [**sigprocmask**(2)](/man/os/coreutils/sigprocmask.2), [**signal**(7)](/man/os/coreutils/signal.7)

Full documentation &lt;https://www.gnu.org/software/coreutils/env&gt;  
or available locally via: info '(coreutils) env invocation'

October 2026 GNU coreutils 9.12

---

Document: env(1) from coreutils 9.12-r6 (Chainguard OS)
Source: https://git.savannah.gnu.org/git/coreutils.git
