1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
'\" t
.\" Copyright, the authors of the Linux man-pages project
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.TH setenv 3 2025-05-17 "Linux man-pages (unreleased)"
.SH NAME
setenv \- change or add an environment variable
.SH LIBRARY
Standard C library
.RI ( libc ,\~ \-lc )
.SH SYNOPSIS
.nf
.B #include <stdlib.h>
.P
.BI "int setenv(const char *" name ", const char *" value ", int " overwrite );
.BI "int unsetenv(const char *" name );
.fi
.P
.RS -4
Feature Test Macro Requirements for glibc (see
.BR feature_test_macros (7)):
.RE
.P
.BR setenv (),
.BR unsetenv ():
.nf
_POSIX_C_SOURCE >= 200112L
|| /* glibc <= 2.19: */ _BSD_SOURCE
.fi
.SH DESCRIPTION
The
.BR setenv ()
function adds the variable
.I name
to the
environment with the value
.IR value ,
if
.I name
does not
already exist.
If
.I name
does exist in the environment, then
its value is changed to
.I value
if
.I overwrite
is nonzero;
if
.I overwrite
is zero, then the value of
.I name
is not changed (and
.BR setenv ()
returns a success status).
This function makes copies of the strings pointed to by
.I name
and
.I value
(by contrast with
.BR putenv (3)).
.P
The
.BR unsetenv ()
function deletes the variable
.I name
from
the environment.
If
.I name
does not exist in the environment,
then the function succeeds, and the environment is unchanged.
.SH RETURN VALUE
.BR setenv ()
and
.BR unsetenv ()
functions return zero on success,
or \-1 on error, with
.I errno
set to indicate the error.
.SH ERRORS
.TP
.B EINVAL
.I name
is NULL, points to a string of length 0,
or contains an \[aq]=\[aq] character.
.TP
.B ENOMEM
Insufficient memory to add a new variable to the environment.
.SH ATTRIBUTES
For an explanation of the terms used in this section, see
.BR attributes (7).
.TS
allbox;
lbx lb lb
l l l.
Interface Attribute Value
T{
.na
.nh
.BR setenv (),
.BR unsetenv ()
T} Thread safety MT-Unsafe const:env
.TE
.SH STANDARDS
POSIX.1-2008.
.SH HISTORY
POSIX.1-2001, 4.3BSD.
.P
Prior to glibc 2.2.2,
.BR unsetenv ()
was prototyped
as returning
.IR void ;
more recent glibc versions follow the
POSIX.1-compliant prototype shown in the SYNOPSIS.
.SH CAVEATS
POSIX.1 does not require
.BR setenv ()
or
.BR unsetenv ()
to be reentrant.
.SH BUGS
POSIX.1 specifies that if
.I name
contains an \[aq]=\[aq] character, then
.BR setenv ()
should fail with the error
.BR EINVAL ;
however, versions of glibc before glibc 2.3.4 allowed an \[aq]=\[aq] sign in
.IR name .
.SH SEE ALSO
.BR clearenv (3),
.BR getenv (3),
.BR putenv (3),
.BR environ (7)
|