xref: /dflybsd-src/usr.bin/env/env.1 (revision 6cd3723e33d07f75108e7f2694de1f7fdbf151e6)
1490834b2SAntonio Huete Jimenez.\" Copyright (c) 1980, 1990, 1993
2490834b2SAntonio Huete Jimenez.\"	The Regents of the University of California.  All rights reserved.
3490834b2SAntonio Huete Jimenez.\"
4490834b2SAntonio Huete Jimenez.\" This code is derived from software contributed to Berkeley by
5490834b2SAntonio Huete Jimenez.\" the Institute of Electrical and Electronics Engineers, Inc.
6490834b2SAntonio Huete Jimenez.\" Redistribution and use in source and binary forms, with or without
7490834b2SAntonio Huete Jimenez.\" modification, are permitted provided that the following conditions
8490834b2SAntonio Huete Jimenez.\" are met:
9490834b2SAntonio Huete Jimenez.\" 1. Redistributions of source code must retain the above copyright
10490834b2SAntonio Huete Jimenez.\"    notice, this list of conditions and the following disclaimer.
11490834b2SAntonio Huete Jimenez.\" 2. Redistributions in binary form must reproduce the above copyright
12490834b2SAntonio Huete Jimenez.\"    notice, this list of conditions and the following disclaimer in the
13490834b2SAntonio Huete Jimenez.\"    documentation and/or other materials provided with the distribution.
14490834b2SAntonio Huete Jimenez.\" 3. Neither the name of the University nor the names of its contributors
15490834b2SAntonio Huete Jimenez.\"    may be used to endorse or promote products derived from this software
16490834b2SAntonio Huete Jimenez.\"    without specific prior written permission.
17490834b2SAntonio Huete Jimenez.\"
18490834b2SAntonio Huete Jimenez.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
19490834b2SAntonio Huete Jimenez.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20490834b2SAntonio Huete Jimenez.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21490834b2SAntonio Huete Jimenez.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
22490834b2SAntonio Huete Jimenez.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23490834b2SAntonio Huete Jimenez.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24490834b2SAntonio Huete Jimenez.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25490834b2SAntonio Huete Jimenez.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26490834b2SAntonio Huete Jimenez.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27490834b2SAntonio Huete Jimenez.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28490834b2SAntonio Huete Jimenez.\" SUCH DAMAGE.
29490834b2SAntonio Huete Jimenez.\"
30490834b2SAntonio Huete Jimenez.\" From @(#)printenv.1	8.1 (Berkeley) 6/6/93
31*6cd3723eSSascha Wildner.\" From FreeBSD: src/usr.bin/printenv/printenv.1,v 1.17 2002/11/26 17:33:35 ru Exp
32*6cd3723eSSascha Wildner.\" $FreeBSD: head/usr.bin/env/env.1 314436 2017-02-28 23:42:47Z imp $
33490834b2SAntonio Huete Jimenez.\"
34*6cd3723eSSascha Wildner.Dd August 17, 2019
35490834b2SAntonio Huete Jimenez.Dt ENV 1
36490834b2SAntonio Huete Jimenez.Os
37490834b2SAntonio Huete Jimenez.Sh NAME
38490834b2SAntonio Huete Jimenez.Nm env
39490834b2SAntonio Huete Jimenez.Nd set environment and execute command, or print environment
40490834b2SAntonio Huete Jimenez.Sh SYNOPSIS
41490834b2SAntonio Huete Jimenez.Nm
42490834b2SAntonio Huete Jimenez.Op Fl iv
43490834b2SAntonio Huete Jimenez.Op Fl P Ar altpath
44490834b2SAntonio Huete Jimenez.Op Fl S Ar string
45490834b2SAntonio Huete Jimenez.Op Fl u Ar name
46490834b2SAntonio Huete Jimenez.Op Ar name Ns = Ns Ar value ...
47490834b2SAntonio Huete Jimenez.Op Ar utility Op Ar argument ...
48490834b2SAntonio Huete Jimenez.Sh DESCRIPTION
49490834b2SAntonio Huete JimenezThe
50490834b2SAntonio Huete Jimenez.Nm
51490834b2SAntonio Huete Jimenezutility executes another
52490834b2SAntonio Huete Jimenez.Ar utility
53490834b2SAntonio Huete Jimenezafter modifying the environment as
54490834b2SAntonio Huete Jimenezspecified on the command line.
55490834b2SAntonio Huete JimenezEach
56490834b2SAntonio Huete Jimenez.Ar name Ns = Ns Ar value
57490834b2SAntonio Huete Jimenezoption specifies the setting of an environment variable,
58490834b2SAntonio Huete Jimenez.Ar name ,
59490834b2SAntonio Huete Jimenezwith a value of
60490834b2SAntonio Huete Jimenez.Ar value .
61490834b2SAntonio Huete JimenezAll such environment variables are set before the
62490834b2SAntonio Huete Jimenez.Ar utility
63490834b2SAntonio Huete Jimenezis executed.
64490834b2SAntonio Huete Jimenez.Pp
65490834b2SAntonio Huete JimenezThe options are as follows:
66490834b2SAntonio Huete Jimenez.Bl -tag -width indent
67490834b2SAntonio Huete Jimenez.It Fl i
68490834b2SAntonio Huete JimenezExecute the
69490834b2SAntonio Huete Jimenez.Ar utility
70490834b2SAntonio Huete Jimenezwith only those environment variables specified by
71490834b2SAntonio Huete Jimenez.Ar name Ns = Ns Ar value
72490834b2SAntonio Huete Jimenezoptions.
73490834b2SAntonio Huete JimenezThe environment inherited
74490834b2SAntonio Huete Jimenezby
75490834b2SAntonio Huete Jimenez.Nm
76490834b2SAntonio Huete Jimenezis ignored completely.
77490834b2SAntonio Huete Jimenez.\"	-P
78490834b2SAntonio Huete Jimenez.It Fl P Ar altpath
79490834b2SAntonio Huete JimenezSearch the set of directories as specified by
80490834b2SAntonio Huete Jimenez.Ar altpath
81490834b2SAntonio Huete Jimenezto locate the specified
82490834b2SAntonio Huete Jimenez.Ar utility
83490834b2SAntonio Huete Jimenezprogram, instead of using the value of the
84490834b2SAntonio Huete Jimenez.Ev PATH
85490834b2SAntonio Huete Jimenezenvironment variable.
86490834b2SAntonio Huete Jimenez.\"	-S
87490834b2SAntonio Huete Jimenez.It Fl S Ar string
88490834b2SAntonio Huete JimenezSplit apart the given
89490834b2SAntonio Huete Jimenez.Ar string
90490834b2SAntonio Huete Jimenezinto multiple strings, and process each of the resulting strings
91490834b2SAntonio Huete Jimenezas separate arguments to the
92490834b2SAntonio Huete Jimenez.Nm
93490834b2SAntonio Huete Jimenezutility.
94490834b2SAntonio Huete JimenezThe
95490834b2SAntonio Huete Jimenez.Fl S
96490834b2SAntonio Huete Jimenezoption recognizes some special character escape sequences and
97490834b2SAntonio Huete Jimenezalso supports environment-variable substitution, as described
98490834b2SAntonio Huete Jimenezbelow.
99490834b2SAntonio Huete Jimenez.\"	-u
100490834b2SAntonio Huete Jimenez.It Fl u Ar name
101490834b2SAntonio Huete JimenezIf the environment variable
102490834b2SAntonio Huete Jimenez.Ar name
103490834b2SAntonio Huete Jimenezis in the environment, then remove it before processing the
104490834b2SAntonio Huete Jimenezremaining options.
105490834b2SAntonio Huete JimenezThis is similar to the
106490834b2SAntonio Huete Jimenez.Ic unset
107490834b2SAntonio Huete Jimenezcommand in
108490834b2SAntonio Huete Jimenez.Xr sh 1 .
109490834b2SAntonio Huete JimenezThe value for
110490834b2SAntonio Huete Jimenez.Ar name
111490834b2SAntonio Huete Jimenezmust not include the
112490834b2SAntonio Huete Jimenez.Ql =
113490834b2SAntonio Huete Jimenezcharacter.
114490834b2SAntonio Huete Jimenez.\"	-v
115490834b2SAntonio Huete Jimenez.It Fl v
116490834b2SAntonio Huete JimenezPrint verbose information for each step of processing done by the
117490834b2SAntonio Huete Jimenez.Nm
118490834b2SAntonio Huete Jimenezutility.
119490834b2SAntonio Huete JimenezAdditional information will be printed if
120490834b2SAntonio Huete Jimenez.Fl v
121490834b2SAntonio Huete Jimenezis specified multiple times.
122490834b2SAntonio Huete Jimenez.El
123490834b2SAntonio Huete Jimenez.Pp
124490834b2SAntonio Huete JimenezThe above options are only recognized when they are specified
125490834b2SAntonio Huete Jimenezbefore any
126490834b2SAntonio Huete Jimenez.Ar name Ns = Ns Ar value
127490834b2SAntonio Huete Jimenezoptions.
128490834b2SAntonio Huete Jimenez.Pp
129490834b2SAntonio Huete JimenezIf no
130490834b2SAntonio Huete Jimenez.Ar utility
131490834b2SAntonio Huete Jimenezis specified,
132490834b2SAntonio Huete Jimenez.Nm
133490834b2SAntonio Huete Jimenezprints out the names and values
134490834b2SAntonio Huete Jimenezof the variables in the environment, with one name/value pair per line.
135490834b2SAntonio Huete Jimenez.\"
136490834b2SAntonio Huete Jimenez.Ss Details of Fl S \&Ss (split-string) processing
137490834b2SAntonio Huete JimenezThe processing of the
138490834b2SAntonio Huete Jimenez.Fl S
139490834b2SAntonio Huete Jimenezoption will split the given
140490834b2SAntonio Huete Jimenez.Ar string
141490834b2SAntonio Huete Jimenezinto separate arguments based on any space or <tab> characters found in the
142490834b2SAntonio Huete Jimenez.Ar string .
143490834b2SAntonio Huete JimenezEach of those new arguments will then be treated as if it had been
144490834b2SAntonio Huete Jimenezspecified as a separate argument on the original
145490834b2SAntonio Huete Jimenez.Nm
146490834b2SAntonio Huete Jimenezcommand.
147490834b2SAntonio Huete Jimenez.Pp
148490834b2SAntonio Huete JimenezSpaces and tabs may be embedded in one of those new arguments by using
149490834b2SAntonio Huete Jimenezsingle
150490834b2SAntonio Huete Jimenez.Pq Dq Li '
151490834b2SAntonio Huete Jimenezor double
152490834b2SAntonio Huete Jimenez.Pq Ql \&"
153490834b2SAntonio Huete Jimenezquotes, or backslashes
154490834b2SAntonio Huete Jimenez.Pq Ql \e .
155490834b2SAntonio Huete JimenezSingle quotes will escape all non-single quote characters, up to
156490834b2SAntonio Huete Jimenezthe matching single quote.
157490834b2SAntonio Huete JimenezDouble quotes will escape all non-double quote characters, up to
158490834b2SAntonio Huete Jimenezthe matching double quote.
159490834b2SAntonio Huete JimenezIt is an error if the end of the
160490834b2SAntonio Huete Jimenez.Ar string
161490834b2SAntonio Huete Jimenezis reached before the matching quote character.
162490834b2SAntonio Huete Jimenez.Pp
163490834b2SAntonio Huete JimenezIf
164490834b2SAntonio Huete Jimenez.Fl S
165490834b2SAntonio Huete Jimenezwould create a new argument that starts with the
166490834b2SAntonio Huete Jimenez.Ql #
167490834b2SAntonio Huete Jimenezcharacter, then that argument and the remainder of the
168490834b2SAntonio Huete Jimenez.Ar string
169490834b2SAntonio Huete Jimenezwill be ignored.
170490834b2SAntonio Huete JimenezThe
171490834b2SAntonio Huete Jimenez.Ql \e#
172490834b2SAntonio Huete Jimenezsequence can be used when you want a new argument to start
173490834b2SAntonio Huete Jimenezwith a
174490834b2SAntonio Huete Jimenez.Ql #
175490834b2SAntonio Huete Jimenezcharacter, without causing the remainder of the
176490834b2SAntonio Huete Jimenez.Ar string
177490834b2SAntonio Huete Jimenezto be skipped.
178490834b2SAntonio Huete Jimenez.Pp
179490834b2SAntonio Huete JimenezWhile processing the
180490834b2SAntonio Huete Jimenez.Ar string
181490834b2SAntonio Huete Jimenezvalue,
182490834b2SAntonio Huete Jimenez.Fl S
183490834b2SAntonio Huete Jimenezprocessing will treat certain character combinations as escape
184490834b2SAntonio Huete Jimenezsequences which represent some action to take.
185490834b2SAntonio Huete JimenezThe character escape sequences are in backslash notation.
186490834b2SAntonio Huete JimenezThe characters and their meanings are as follows:
187490834b2SAntonio Huete Jimenez.Pp
188490834b2SAntonio Huete Jimenez.Bl -tag -width indent -offset indent -compact
189490834b2SAntonio Huete Jimenez.It Cm \ec
190490834b2SAntonio Huete JimenezIgnore the remaining characters in the
191490834b2SAntonio Huete Jimenez.Ar string .
192490834b2SAntonio Huete JimenezThis must not appear inside a double-quoted string.
193490834b2SAntonio Huete Jimenez.It Cm \ef
194490834b2SAntonio Huete JimenezReplace with a <form-feed> character.
195490834b2SAntonio Huete Jimenez.It Cm \en
196490834b2SAntonio Huete JimenezReplace with a <new-line> character.
197490834b2SAntonio Huete Jimenez.It Cm \er
198490834b2SAntonio Huete JimenezReplace with a <carriage return> character.
199490834b2SAntonio Huete Jimenez.It Cm \et
200490834b2SAntonio Huete JimenezReplace with a <tab> character.
201490834b2SAntonio Huete Jimenez.It Cm \ev
202490834b2SAntonio Huete JimenezReplace with a <vertical tab> character.
203490834b2SAntonio Huete Jimenez.It Cm \e#
204490834b2SAntonio Huete JimenezReplace with a
205490834b2SAntonio Huete Jimenez.Ql #
206490834b2SAntonio Huete Jimenezcharacter.
207490834b2SAntonio Huete JimenezThis would be useful when you need a
208490834b2SAntonio Huete Jimenez.Ql #
209490834b2SAntonio Huete Jimenezas the first character in one of the arguments created
210490834b2SAntonio Huete Jimenezby splitting apart the given
211490834b2SAntonio Huete Jimenez.Ar string .
212490834b2SAntonio Huete Jimenez.It Cm \e$
213490834b2SAntonio Huete JimenezReplace with a
214490834b2SAntonio Huete Jimenez.Ql $
215490834b2SAntonio Huete Jimenezcharacter.
216490834b2SAntonio Huete Jimenez.It Cm \e_
217490834b2SAntonio Huete JimenezIf this is found inside of a double-quoted string, then replace it
218490834b2SAntonio Huete Jimenezwith a single blank.
219490834b2SAntonio Huete JimenezIf this is found outside of a quoted string, then treat this as the
220490834b2SAntonio Huete Jimenezseparator character between new arguments in the original
221490834b2SAntonio Huete Jimenez.Ar string .
222490834b2SAntonio Huete Jimenez.It Cm \e"
223490834b2SAntonio Huete JimenezReplace with a <double quote> character.
224490834b2SAntonio Huete Jimenez.It Cm \e\'
225490834b2SAntonio Huete JimenezReplace with a <single quote> character.
226490834b2SAntonio Huete Jimenez.It Cm \e\e
227490834b2SAntonio Huete JimenezReplace with a backslash character.
228490834b2SAntonio Huete Jimenez.El
229490834b2SAntonio Huete Jimenez.Pp
230490834b2SAntonio Huete JimenezThe sequences for <single-quote> and backslash are the only sequences
231490834b2SAntonio Huete Jimenezwhich are recognized inside of a single-quoted string.
232490834b2SAntonio Huete JimenezThe other sequences have no special meaning inside a single-quoted
233490834b2SAntonio Huete Jimenezstring.
234490834b2SAntonio Huete JimenezAll escape sequences are recognized inside of a double-quoted string.
235490834b2SAntonio Huete JimenezIt is an error if a single
236490834b2SAntonio Huete Jimenez.Ql \e
237490834b2SAntonio Huete Jimenezcharacter is followed by a character other than the ones listed above.
238490834b2SAntonio Huete Jimenez.Pp
239490834b2SAntonio Huete JimenezThe processing of
240490834b2SAntonio Huete Jimenez.Fl S
241490834b2SAntonio Huete Jimenezalso supports substitution of values from environment variables.
242490834b2SAntonio Huete JimenezTo do this, the name of the environment variable must be inside of
243490834b2SAntonio Huete Jimenez.Ql ${} ,
244490834b2SAntonio Huete Jimenezsuch as:
245490834b2SAntonio Huete Jimenez.Li ${SOMEVAR} .
246490834b2SAntonio Huete JimenezThe common shell syntax of
247490834b2SAntonio Huete Jimenez.Li $SOMEVAR
248490834b2SAntonio Huete Jimenezis not supported.
249490834b2SAntonio Huete JimenezAll values substituted will be the values of the environment variables
250490834b2SAntonio Huete Jimenezas they were when the
251490834b2SAntonio Huete Jimenez.Nm
252490834b2SAntonio Huete Jimenezutility was originally invoked.
253490834b2SAntonio Huete JimenezThose values will not be checked for any of the escape sequences as
254490834b2SAntonio Huete Jimenezdescribed above.
255490834b2SAntonio Huete JimenezAnd any settings of
256490834b2SAntonio Huete Jimenez.Ar name Ns = Ns Ar value
257490834b2SAntonio Huete Jimenezwill not effect the values used for substitution in
258490834b2SAntonio Huete Jimenez.Fl S
259490834b2SAntonio Huete Jimenezprocessing.
260490834b2SAntonio Huete Jimenez.Pp
261490834b2SAntonio Huete JimenezAlso,
262490834b2SAntonio Huete Jimenez.Fl S
263490834b2SAntonio Huete Jimenezprocessing can not reference the value of the special parameters
264490834b2SAntonio Huete Jimenezwhich are defined by most shells.
265490834b2SAntonio Huete JimenezFor instance,
266490834b2SAntonio Huete Jimenez.Fl S
267490834b2SAntonio Huete Jimenezcan not recognize special parameters such as:
268490834b2SAntonio Huete Jimenez.Ql $* ,
269490834b2SAntonio Huete Jimenez.Ql $@ ,
270490834b2SAntonio Huete Jimenez.Ql $# ,
271490834b2SAntonio Huete Jimenez.Ql $?
272490834b2SAntonio Huete Jimenezor
273490834b2SAntonio Huete Jimenez.Ql $$
274490834b2SAntonio Huete Jimenezif they appear inside the given
275490834b2SAntonio Huete Jimenez.Ar string .
276490834b2SAntonio Huete Jimenez.\"
277490834b2SAntonio Huete Jimenez.Ss Use in shell-scripts
278490834b2SAntonio Huete JimenezThe
279490834b2SAntonio Huete Jimenez.Nm
280490834b2SAntonio Huete Jimenezutility is often used as the
281490834b2SAntonio Huete Jimenez.Ar interpreter
282490834b2SAntonio Huete Jimenezon the first line of interpreted scripts, as
283490834b2SAntonio Huete Jimenezdescribed in
284490834b2SAntonio Huete Jimenez.Xr execve 2 .
285490834b2SAntonio Huete Jimenez.Pp
286490834b2SAntonio Huete JimenezNote that the way the kernel parses the
287490834b2SAntonio Huete Jimenez.Ql #!
288490834b2SAntonio Huete Jimenez(first line) of an interpreted script has changed as of
289490834b2SAntonio Huete Jimenez.Fx 6.0 .
290490834b2SAntonio Huete JimenezPrior to that, the
291490834b2SAntonio Huete Jimenez.Fx
292490834b2SAntonio Huete Jimenezkernel would split that first line into separate arguments based
293490834b2SAntonio Huete Jimenezon any whitespace (space or <tab> characters) found in the line.
294490834b2SAntonio Huete JimenezSo, if a script named
295490834b2SAntonio Huete Jimenez.Pa /usr/local/bin/someport
296490834b2SAntonio Huete Jimenezhad a first line of:
297490834b2SAntonio Huete Jimenez.Pp
298490834b2SAntonio Huete Jimenez.Dl "#!/usr/local/bin/php -n -q -dsafe_mode=0"
299490834b2SAntonio Huete Jimenez.Pp
300490834b2SAntonio Huete Jimenezthen the
301490834b2SAntonio Huete Jimenez.Pa /usr/local/bin/php
302490834b2SAntonio Huete Jimenezprogram would have been started with the arguments of:
303490834b2SAntonio Huete Jimenez.Bd -literal -offset indent
304490834b2SAntonio Huete Jimenezarg[0] = '/usr/local/bin/php'
305490834b2SAntonio Huete Jimenezarg[1] = '-n'
306490834b2SAntonio Huete Jimenezarg[2] = '-q'
307490834b2SAntonio Huete Jimenezarg[3] = '-dsafe_mode=0'
308490834b2SAntonio Huete Jimenezarg[4] = '/usr/local/bin/someport'
309490834b2SAntonio Huete Jimenez.Ed
310490834b2SAntonio Huete Jimenez.Pp
311490834b2SAntonio Huete Jimenezplus any arguments the user specified when executing
312490834b2SAntonio Huete Jimenez.Pa someport .
313490834b2SAntonio Huete JimenezHowever, this processing of multiple options on the
314490834b2SAntonio Huete Jimenez.Ql #!
315490834b2SAntonio Huete Jimenezline is not the way any other operating system parses the
316490834b2SAntonio Huete Jimenezfirst line of an interpreted script.
317490834b2SAntonio Huete JimenezSo after a change which was made for
318490834b2SAntonio Huete Jimenez.Fx 6.0
319490834b2SAntonio Huete Jimenezrelease, that script will result in
320490834b2SAntonio Huete Jimenez.Pa /usr/local/bin/php
321490834b2SAntonio Huete Jimenezbeing started with the arguments of:
322490834b2SAntonio Huete Jimenez.Bd -literal -offset indent
323490834b2SAntonio Huete Jimenezarg[0] = '/usr/local/bin/php'
324490834b2SAntonio Huete Jimenezarg[1] = '-n -q -dsafe_mode=0'
325490834b2SAntonio Huete Jimenezarg[2] = '/usr/local/bin/someport'
326490834b2SAntonio Huete Jimenez.Ed
327490834b2SAntonio Huete Jimenez.Pp
328490834b2SAntonio Huete Jimenezplus any arguments the user specified.
329490834b2SAntonio Huete JimenezThis caused a significant change in the behavior of a few scripts.
330490834b2SAntonio Huete JimenezIn the case of above script, to have it behave the same way under
331490834b2SAntonio Huete Jimenez.Fx 6.0
332490834b2SAntonio Huete Jimenezas it did under earlier releases, the first line should be
333490834b2SAntonio Huete Jimenezchanged to:
334490834b2SAntonio Huete Jimenez.Pp
335490834b2SAntonio Huete Jimenez.Dl "#!/usr/bin/env -S /usr/local/bin/php -n -q -dsafe_mode=0"
336490834b2SAntonio Huete Jimenez.Pp
337490834b2SAntonio Huete JimenezThe
338490834b2SAntonio Huete Jimenez.Nm
339490834b2SAntonio Huete Jimenezutility will be started with the entire line as a single
340490834b2SAntonio Huete Jimenezargument:
341490834b2SAntonio Huete Jimenez.Pp
342490834b2SAntonio Huete Jimenez.Dl "arg[1] = '-S /usr/local/bin/php -n -q -dsafe_mode=0'"
343490834b2SAntonio Huete Jimenez.Pp
344490834b2SAntonio Huete Jimenezand then
345490834b2SAntonio Huete Jimenez.Fl S
346490834b2SAntonio Huete Jimenezprocessing will split that line into separate arguments before
347490834b2SAntonio Huete Jimenezexecuting
348490834b2SAntonio Huete Jimenez.Pa /usr/local/bin/php .
349490834b2SAntonio Huete Jimenez.\"
350490834b2SAntonio Huete Jimenez.Sh ENVIRONMENT
351490834b2SAntonio Huete JimenezThe
352490834b2SAntonio Huete Jimenez.Nm
353490834b2SAntonio Huete Jimenezutility uses the
354490834b2SAntonio Huete Jimenez.Ev PATH
355490834b2SAntonio Huete Jimenezenvironment variable to locate the requested
356490834b2SAntonio Huete Jimenez.Ar utility
357490834b2SAntonio Huete Jimenezif the name contains no
358490834b2SAntonio Huete Jimenez.Ql /
359490834b2SAntonio Huete Jimenezcharacters, unless the
360490834b2SAntonio Huete Jimenez.Fl P
361490834b2SAntonio Huete Jimenezoption has been specified.
362490834b2SAntonio Huete Jimenez.Sh EXIT STATUS
363490834b2SAntonio Huete Jimenez.Ex -std
364490834b2SAntonio Huete JimenezAn exit status of 126 indicates that
365490834b2SAntonio Huete Jimenez.Ar utility
366490834b2SAntonio Huete Jimenezwas found, but could not be executed.
367490834b2SAntonio Huete JimenezAn exit status of 127 indicates that
368490834b2SAntonio Huete Jimenez.Ar utility
369490834b2SAntonio Huete Jimenezcould not be found.
370490834b2SAntonio Huete Jimenez.Sh EXAMPLES
371490834b2SAntonio Huete JimenezSince the
372490834b2SAntonio Huete Jimenez.Nm
373490834b2SAntonio Huete Jimenezutility is often used as part of the first line of an interpreted script,
374490834b2SAntonio Huete Jimenezthe following examples show a number of ways that the
375490834b2SAntonio Huete Jimenez.Nm
376490834b2SAntonio Huete Jimenezutility can be useful in scripts.
377490834b2SAntonio Huete Jimenez.Pp
378490834b2SAntonio Huete JimenezThe kernel processing of an interpreted script does not allow a script
379490834b2SAntonio Huete Jimenezto directly reference some other script as its own interpreter.
380490834b2SAntonio Huete JimenezAs a way around this, the main difference between
381490834b2SAntonio Huete Jimenez.Pp
382490834b2SAntonio Huete Jimenez.Dl #!/usr/local/bin/foo
383490834b2SAntonio Huete Jimenezand
384490834b2SAntonio Huete Jimenez.Dl "#!/usr/bin/env /usr/local/bin/foo"
385490834b2SAntonio Huete Jimenez.Pp
386490834b2SAntonio Huete Jimenezis that the latter works even if
387490834b2SAntonio Huete Jimenez.Pa /usr/local/bin/foo
388490834b2SAntonio Huete Jimenezis itself an interpreted script.
389490834b2SAntonio Huete Jimenez.Pp
390490834b2SAntonio Huete JimenezProbably the most common use of
391490834b2SAntonio Huete Jimenez.Nm
392490834b2SAntonio Huete Jimenezis to find the correct interpreter for a script, when the interpreter
393490834b2SAntonio Huete Jimenezmay be in different directories on different systems.
394490834b2SAntonio Huete JimenezThe following example will find the
395490834b2SAntonio Huete Jimenez.Ql perl
396490834b2SAntonio Huete Jimenezinterpreter by searching through the directories specified by
397490834b2SAntonio Huete Jimenez.Ev PATH .
398490834b2SAntonio Huete Jimenez.Pp
399490834b2SAntonio Huete Jimenez.Dl "#!/usr/bin/env perl"
400490834b2SAntonio Huete Jimenez.Pp
401490834b2SAntonio Huete JimenezOne limitation of that example is that it assumes the user's value
402490834b2SAntonio Huete Jimenezfor
403490834b2SAntonio Huete Jimenez.Ev PATH
404490834b2SAntonio Huete Jimenezis set to a value which will find the interpreter you want
405490834b2SAntonio Huete Jimenezto execute.
406490834b2SAntonio Huete JimenezThe
407490834b2SAntonio Huete Jimenez.Fl P
408490834b2SAntonio Huete Jimenezoption can be used to make sure a specific list of directories is
409490834b2SAntonio Huete Jimenezused in the search for
410490834b2SAntonio Huete Jimenez.Ar utility .
411490834b2SAntonio Huete JimenezNote that the
412490834b2SAntonio Huete Jimenez.Fl S
413490834b2SAntonio Huete Jimenezoption is also required for this example to work correctly.
414490834b2SAntonio Huete Jimenez.Pp
415490834b2SAntonio Huete Jimenez.Dl "#!/usr/bin/env -S -P/usr/local/bin:/usr/bin perl"
416490834b2SAntonio Huete Jimenez.Pp
417490834b2SAntonio Huete JimenezThe above finds
418490834b2SAntonio Huete Jimenez.Ql perl
419490834b2SAntonio Huete Jimenezonly if it is in
420490834b2SAntonio Huete Jimenez.Pa /usr/local/bin
421490834b2SAntonio Huete Jimenezor
422490834b2SAntonio Huete Jimenez.Pa /usr/bin .
423490834b2SAntonio Huete JimenezThat could be combined with the present value of
424490834b2SAntonio Huete Jimenez.Ev PATH ,
425490834b2SAntonio Huete Jimenezto provide more flexibility.
426490834b2SAntonio Huete JimenezNote that spaces are not required between the
427490834b2SAntonio Huete Jimenez.Fl S
428490834b2SAntonio Huete Jimenezand
429490834b2SAntonio Huete Jimenez.Fl P
430490834b2SAntonio Huete Jimenezoptions:
431490834b2SAntonio Huete Jimenez.Pp
432490834b2SAntonio Huete Jimenez.Dl "#!/usr/bin/env -S-P/usr/local/bin:/usr/bin:${PATH} perl"
433490834b2SAntonio Huete Jimenez.Sh COMPATIBILITY
434490834b2SAntonio Huete JimenezThe
435490834b2SAntonio Huete Jimenez.Nm
436490834b2SAntonio Huete Jimenezutility accepts the
437490834b2SAntonio Huete Jimenez.Fl
438490834b2SAntonio Huete Jimenezoption as a synonym for
439490834b2SAntonio Huete Jimenez.Fl i .
440490834b2SAntonio Huete Jimenez.Sh SEE ALSO
441490834b2SAntonio Huete Jimenez.Xr printenv 1 ,
442490834b2SAntonio Huete Jimenez.Xr sh 1 ,
443490834b2SAntonio Huete Jimenez.Xr execvp 3 ,
444490834b2SAntonio Huete Jimenez.Xr environ 7
445490834b2SAntonio Huete Jimenez.Sh STANDARDS
446490834b2SAntonio Huete JimenezThe
447490834b2SAntonio Huete Jimenez.Nm
448490834b2SAntonio Huete Jimenezutility conforms to
449490834b2SAntonio Huete Jimenez.St -p1003.1-2001 .
450490834b2SAntonio Huete JimenezThe
451490834b2SAntonio Huete Jimenez.Fl P , S , u
452490834b2SAntonio Huete Jimenezand
453490834b2SAntonio Huete Jimenez.Fl v
454490834b2SAntonio Huete Jimenezoptions are non-standard extensions supported by
455490834b2SAntonio Huete Jimenez.Fx ,
456490834b2SAntonio Huete Jimenezbut which may not be available on other operating systems.
457490834b2SAntonio Huete Jimenez.Sh HISTORY
458490834b2SAntonio Huete JimenezThe
459490834b2SAntonio Huete Jimenez.Nm
460490834b2SAntonio Huete Jimenezcommand appeared in
461490834b2SAntonio Huete Jimenez.Bx 4.4 .
462490834b2SAntonio Huete JimenezThe
463490834b2SAntonio Huete Jimenez.Fl P , S
464490834b2SAntonio Huete Jimenezand
465490834b2SAntonio Huete Jimenez.Fl v
466490834b2SAntonio Huete Jimenezoptions were added in
467490834b2SAntonio Huete Jimenez.Fx 6.0 .
468490834b2SAntonio Huete Jimenez.Sh BUGS
469490834b2SAntonio Huete JimenezThe
470490834b2SAntonio Huete Jimenez.Nm
471490834b2SAntonio Huete Jimenezutility does not handle values of
472490834b2SAntonio Huete Jimenez.Ar utility
473490834b2SAntonio Huete Jimenezwhich have an equals sign
474490834b2SAntonio Huete Jimenez.Pq Ql =
475490834b2SAntonio Huete Jimenezin their name, for obvious reasons.
476490834b2SAntonio Huete Jimenez.Pp
477490834b2SAntonio Huete JimenezThe
478490834b2SAntonio Huete Jimenez.Nm
479490834b2SAntonio Huete Jimenezutility does not take multibyte characters into account when
480490834b2SAntonio Huete Jimenezprocessing the
481490834b2SAntonio Huete Jimenez.Fl S
482490834b2SAntonio Huete Jimenezoption, which may lead to incorrect results in some locales.
483