Annotation of researchv10dc/man/adm/man1/sh.1, revision 1.1

1.1     ! root        1: .ds OK [\|
        !             2: .ds CK \|]
        !             3: .TH SH 1
        !             4: .CT 1 shell proc_man dirs files
        !             5: .SH NAME
        !             6: sh, cd, wait, whatis \- shell, the standard command programming language
        !             7: .SH SYNOPSIS
        !             8: .B sh
        !             9: [
        !            10: .B -acefiknpstuvx
        !            11: ]
        !            12: [
        !            13: .I args
        !            14: ]
        !            15: .SH DESCRIPTION
        !            16: .I Sh
        !            17: is a command programming language
        !            18: that executes commands read from a terminal
        !            19: or a file.
        !            20: See `Invocation' below
        !            21: for the meaning of arguments to the shell.
        !            22: .SS Definitions
        !            23: A
        !            24: .I blank
        !            25: is a tab or a space.
        !            26: A
        !            27: .I name
        !            28: is a sequence of letters, digits, or underscores beginning with a letter
        !            29: or underscore.
        !            30: A
        !            31: .I parameter
        !            32: is a name, a digit, or any of the characters
        !            33: .BR \(** ,
        !            34: .BR @ ,
        !            35: .BR # ,
        !            36: .BR ? ,
        !            37: .BR - ,
        !            38: .BR $ ,
        !            39: and
        !            40: .BR !\\^ .
        !            41: A
        !            42: .I word
        !            43: is a sequence of characters and quoted strings set off by operators,
        !            44: blanks, or newlines; see `Quoting'.
        !            45: .SS Commands
        !            46: A
        !            47: .I simple-command
        !            48: is a sequence of
        !            49: .I words
        !            50: separated by
        !            51: .IR blanks .
        !            52: The first word specifies the name of the command to
        !            53: be executed.
        !            54: Except as specified below,
        !            55: the remaining words are passed as arguments
        !            56: to the invoked command.
        !            57: The command name is passed as argument 0; see
        !            58: .IR exec (2).
        !            59: The
        !            60: .I value
        !            61: of a simple-command is its exit status
        !            62: if it terminates normally, or 
        !            63: .BR 0200+ status
        !            64: if it terminates abnormally; see
        !            65: .IR signal (2)
        !            66: for a list of
        !            67: status values.
        !            68: .PP
        !            69: A
        !            70: .I pipeline
        !            71: is a sequence of one or more
        !            72: .I commands
        !            73: separated by
        !            74: .BR | .
        !            75: If there is more than one command, each is run
        !            76: in a subshell; 
        !            77: .B |
        !            78: denotes a
        !            79: .IR pipe (2)
        !            80: connecting the standard output of one command to the standard input
        !            81: of the next.
        !            82: Each command is run as a separate process;
        !            83: the shell waits for the last command to terminate.
        !            84: The exit status of a pipeline is the exit status of the last command.
        !            85: .PP
        !            86: A
        !            87: .I list
        !            88: is a sequence of one or more
        !            89: pipelines
        !            90: separated by
        !            91: .BR ; ,
        !            92: .BR & ,
        !            93: .BR && ,
        !            94: or
        !            95: .BR || ,
        !            96: and terminated by
        !            97: .B ;
        !            98: or
        !            99: .BR & .
        !           100: Of these four symbols,
        !           101: .B ;
        !           102: and
        !           103: .B &
        !           104: have equal precedence,
        !           105: which is lower than that of
        !           106: .B &&
        !           107: and
        !           108: .BR || .
        !           109: The symbols
        !           110: .B &&
        !           111: and
        !           112: .B ||
        !           113: also have equal precedence.
        !           114: A semicolon
        !           115: .RB ( ; )
        !           116: causes sequential execution of the preceding pipeline; an ampersand
        !           117: .RB ( & )
        !           118: causes asynchronous execution of the pipeline; the shell does not 
        !           119: wait and proceeds as if the pipeline
        !           120: had returned zero exit status.
        !           121: The symbol
        !           122: .B &&
        !           123: .RB ( || )
        !           124: causes the
        !           125: .I list
        !           126: following it to be executed only if the preceding
        !           127: pipeline
        !           128: returns a zero (non-zero) exit status.
        !           129: One or more newlines may follow any sequencing operator
        !           130: .RB ( "; & && ||" ).
        !           131: .PP
        !           132: One or more newlines may always be used in place of a single semicolon,
        !           133: and newlines may be freely inserted after any of
        !           134: .BR "| ; & && || ;; if do then elif else fi done while until" .
        !           135: .PP
        !           136: A
        !           137: .I command
        !           138: is either a simple-command
        !           139: or one of the following.
        !           140: Unless otherwise stated,
        !           141: the value returned by a command is that of the
        !           142: last simple-command executed in the command.
        !           143: .PP
        !           144: .PD 0
        !           145: .TP
        !           146: \f5for\fP \f2name\fP \*(OK \&\f5in\fP \f2word\fP .\|.\|. \&\f5;\fP \*(CK \
        !           147: \f5do\fP \f2list\fP \f5;\fP \f5done\fP
        !           148: A
        !           149: .L for
        !           150: command executes a
        !           151: .I list
        !           152: of commands once for each
        !           153: .I word,
        !           154: with
        !           155: .I name
        !           156: set to each 
        !           157: .I word
        !           158: in turn.
        !           159: If
        !           160: .BI in " word"
        !           161: .RB .\|.\|. " ;"
        !           162: is omitted or replaced by newlines, then
        !           163: the
        !           164: .I list
        !           165: is executed once for each positional parameter
        !           166: that is set; see `Parameter Substitution'.
        !           167: .TP
        !           168: \f5case\fP \f2word\fP \&\f5in\fP \*(OK \f2pattern\fP \*(OK | \
        !           169: \f2pattern\fP \*(CK .\|.\|. \&\f5)\fP \f2list\fP \&\f5;;\fP \*(CK .\|.\|. \f5esac\fP
        !           170: A
        !           171: .L case
        !           172: command executes the
        !           173: .I list
        !           174: associated with the first
        !           175: .I pattern
        !           176: that matches
        !           177: .IR word .
        !           178: The form of the patterns is
        !           179: the same as that used for
        !           180: file-name generation (see `File Name Generation')
        !           181: except that a slash, a leading dot, or a dot immediately
        !           182: following a slash need not be matched explicitly.
        !           183: Newlines may precede each 
        !           184: .IR pattern 
        !           185: and replace the last
        !           186: .B ;;
        !           187: before
        !           188: .BR esac .
        !           189: .TP
        !           190: \f5if\fP \f2list\fP \&\f5then\fP \f2list\fP \*(OK \
        !           191: \&\f5elif\fP \f2list\fP \&\f5then\fP \f2list\fP \*(CK .\|.\|. \
        !           192: \*(OK \&\f5else\fP \f2list\fP \*(CK \&\f5f\&i\fP
        !           193: The
        !           194: .I list
        !           195: following
        !           196: .L if
        !           197: is executed and, if it
        !           198: returns a zero exit status, the
        !           199: .I list
        !           200: following
        !           201: the first
        !           202: .L then
        !           203: is executed.
        !           204: Otherwise, the
        !           205: .I lists
        !           206: in
        !           207: .L elif
        !           208: clauses are executed in turn until one returns zero status;
        !           209: then the
        !           210: .I list
        !           211: following
        !           212: the next
        !           213: .L then
        !           214: is executed.
        !           215: Otherwise, the
        !           216: .L else
        !           217: .I list
        !           218: is executed.
        !           219: If no
        !           220: .L else
        !           221: .I list
        !           222: or
        !           223: .L then
        !           224: .I list
        !           225: is executed, then the
        !           226: .B if
        !           227: command returns a zero exit status.
        !           228: .TP
        !           229: \f5while\fP \f2list\fP \&\f5do\fP \f2list\fP \&\f5done\fP
        !           230: A
        !           231: .L while
        !           232: command repeatedly executes the
        !           233: .L while
        !           234: .I list
        !           235: and, if the exit status of the last command in the list is zero, executes
        !           236: the
        !           237: .L do
        !           238: .IR list ;
        !           239: otherwise the loop terminates.
        !           240: If no commands in the
        !           241: .L do
        !           242: .I list
        !           243: are executed, then the
        !           244: .L while
        !           245: command returns a zero exit status;
        !           246: .L until
        !           247: may be used in place of
        !           248: .L while
        !           249: to negate
        !           250: the loop termination test.
        !           251: .TP
        !           252: \f5(\fP\f2list\^\f5)\fP
        !           253: .br
        !           254: Execute
        !           255: .I list
        !           256: in a sub-shell.
        !           257: .TP
        !           258: \f5{\fP\f2list\^\fP\f5}\fR
        !           259: .br
        !           260: .I list
        !           261: is simply executed.
        !           262: .TP
        !           263: \f2name\fP \f5() \f2command\fP
        !           264: Define a function
        !           265: which is referenced by
        !           266: .I name.
        !           267: The body of the function
        !           268: is the
        !           269: .IR command .
        !           270: The most useful form of
        !           271: .I command
        !           272: is a sequence of commands enclosed in braces
        !           273: .BR "{ }" .
        !           274: Execution of functions is described under
        !           275: .IR Execution 
        !           276: below.
        !           277: .PD
        !           278: .PP
        !           279: These words
        !           280: are only recognized as the first word of a command and when not quoted:
        !           281: .B
        !           282: if then else elif fi case esac for while until do done\fR.
        !           283: .SS Comments
        !           284: A word beginning with
        !           285: .B #
        !           286: causes that word and all the following characters up to a newline
        !           287: to be ignored.
        !           288: .SS Command Substitution
        !           289: The standard output from a command enclosed in
        !           290: a pair of grave accents
        !           291: .B ` `
        !           292: may be used as part or all
        !           293: of a word;
        !           294: trailing newlines are removed.
        !           295: .SS Parameter Substitution
        !           296: The character
        !           297: .B $
        !           298: is used to introduce substitutable
        !           299: .IR parameters .
        !           300: There are two types of parameters,
        !           301: positional and keyword.
        !           302: If
        !           303: .I parameter
        !           304: is a digit, it is a positional parameter.
        !           305: Positional parameters may be assigned values by
        !           306: .BR set .
        !           307: Keyword parameters (also known as variables)
        !           308: may be assigned values by writing:
        !           309: .RS
        !           310: .PP
        !           311: .IB name = value
        !           312: \*(OK
        !           313: .IB name = value
        !           314: \*(CK .\|.\|.
        !           315: .RE
        !           316: .PP
        !           317: Pattern-matching is not performed on
        !           318: .IR value .
        !           319: There cannot be a function and a variable with the same
        !           320: .IR name  .
        !           321: .PP
        !           322: .PD 0
        !           323: .TP
        !           324: \f5${\fP\f2parameter\^\fP\f5}\fP
        !           325: The value, if any, of the parameter is substituted.
        !           326: The braces are required only when
        !           327: .I parameter
        !           328: is followed by a letter, digit, or underscore
        !           329: that is not to be interpreted as part of its name.
        !           330: If
        !           331: .I parameter
        !           332: is
        !           333: .B \(**
        !           334: or
        !           335: .BR @ ,
        !           336: all the positional
        !           337: parameters, starting with
        !           338: .BR $1 ,
        !           339: are substituted
        !           340: (separated by spaces).
        !           341: Parameter
        !           342: .B $0
        !           343: is set from argument zero when the shell
        !           344: is invoked.
        !           345: .TP
        !           346: \f5${\fP\f2parameter\^\fP\f5:-\fP\f2word\^\fP\f5}\fP
        !           347: If
        !           348: .I parameter
        !           349: is set and is non-null, substitute its value;
        !           350: otherwise substitute
        !           351: .IR word .
        !           352: .TP
        !           353: \f5${\fP\f2parameter\^\fP\f5:=\fP\f2word\^\fP\f5}\fP
        !           354: If
        !           355: .I parameter
        !           356: is not set or is null
        !           357: set it to
        !           358: .IR word ;
        !           359: the value of the parameter is substituted.
        !           360: Positional parameters may not be assigned to
        !           361: in this way.
        !           362: .TP
        !           363: \f5${\fP\f2parameter\^\fP\f5:?\fP\f2word\^\fP\f5}\fP
        !           364: If
        !           365: .I parameter
        !           366: is set and is non-null, substitute its value;
        !           367: otherwise, print
        !           368: .I word
        !           369: and exit from the shell.
        !           370: If
        !           371: .I word
        !           372: is omitted, the message
        !           373: ``parameter null or not set''
        !           374: is printed.
        !           375: .TP
        !           376: \f5${\fP\f2parameter\^\fP\f5:+\fP\f2word\^\fP\f5}\fP
        !           377: If
        !           378: .I parameter
        !           379: is set and is non-null, substitute
        !           380: .IR word ;
        !           381: otherwise substitute nothing.
        !           382: .PD
        !           383: .PP
        !           384: In the above,
        !           385: .I word
        !           386: is not evaluated unless it is
        !           387: to be used as the substituted string,
        !           388: so that, in the following example,
        !           389: .B pwd
        !           390: is executed only if
        !           391: .B d
        !           392: is not set or is null:
        !           393: .IP
        !           394: .B echo ${d:-\`pwd\`}
        !           395: .PP
        !           396: If the colon
        !           397: .RB ( : )
        !           398: is omitted from the above expressions, the
        !           399: shell only checks whether
        !           400: .I parameter
        !           401: is set or not.
        !           402: .PP
        !           403: The following
        !           404: parameters
        !           405: are automatically set by the shell:
        !           406: .RS
        !           407: .PD 0
        !           408: .TP
        !           409: .B #
        !           410: The number of positional parameters in decimal.
        !           411: .TP
        !           412: .B -
        !           413: Flags supplied to the shell on invocation or by
        !           414: the
        !           415: .B set
        !           416: command.
        !           417: .TP
        !           418: .B ?
        !           419: The decimal value returned by the last synchronously executed command;
        !           420: see
        !           421: .IR exit (2).
        !           422: .TP
        !           423: .B $
        !           424: The process number of this shell.
        !           425: .TP
        !           426: .B !
        !           427: The process number of the last background command invoked.
        !           428: .PD
        !           429: .RE
        !           430: .PP
        !           431: The following
        !           432: parameters
        !           433: are used by the shell:
        !           434: .RS
        !           435: .PD 0
        !           436: .TP
        !           437: .B
        !           438: .SM HOME
        !           439: The default argument (home directory) for the
        !           440: .I cd
        !           441: command.
        !           442: .TP
        !           443: .B
        !           444: .SM PATH
        !           445: The search path for commands; see `Execution'.
        !           446: .TP
        !           447: .B
        !           448: .SM CDPATH
        !           449: The search path for the
        !           450: .I cd
        !           451: command.
        !           452: .TP
        !           453: .B
        !           454: .SM MAIL
        !           455: If this parameter is set to the name of a mail file
        !           456: the shell informs the user of the arrival of mail
        !           457: in the specified file.
        !           458: The file is inspected every three minutes.
        !           459: .TP
        !           460: .B
        !           461: .SM HISTORY
        !           462: If this parameter is set to the name of a writable file,
        !           463: the shell appends interactive input to the file, for use by the command
        !           464: .IR = (1).
        !           465: .TP
        !           466: .SM
        !           467: .B PS1
        !           468: Primary prompt string, by default
        !           469: .LR $ .
        !           470: .TP
        !           471: .SM
        !           472: .B PS2
        !           473: Secondary prompt string, by default
        !           474: .LR > .
        !           475: .TP
        !           476: .SM
        !           477: .B IFS
        !           478: Internal field separators,
        !           479: normally space, tab, and newline.
        !           480: .PD
        !           481: .RE
        !           482: .PP
        !           483: The shell gives default values to
        !           484: \f5\s-1PATH\s+1\fP, \f5\s-1PS1\s+1\fP, \f5\s-1PS2\s+1\fP and \f5\s-1IFS\s+1\fP.
        !           485: .SM
        !           486: .B HOME
        !           487: is set by
        !           488: .IR login (8).
        !           489: .SS Blank Interpretation
        !           490: After parameter and command substitution,
        !           491: the results of substitution are scanned for internal field separator
        !           492: characters (those found in
        !           493: .BR \s-1IFS\s+1 )
        !           494: and split into distinct arguments where such characters are found.
        !           495: Explicit null arguments (\^\f5"\^"\fP or \f5\'\^\'\fP\^) are retained.
        !           496: Implicit null arguments
        !           497: (those resulting from
        !           498: .I parameters
        !           499: that have no values) are removed.
        !           500: .SS File Name Generation
        !           501: Following substitution, each command
        !           502: .I word
        !           503: is scanned for
        !           504: the characters
        !           505: .BR \(** ,
        !           506: .BR ? ,
        !           507: and
        !           508: .BR \*(OK .
        !           509: If one of these characters appears
        !           510: the word is regarded as a
        !           511: .IR pattern .
        !           512: The word is replaced with alphabetically sorted file names that match the pattern.
        !           513: If no file name is found that matches the pattern,
        !           514: the word is left unchanged.
        !           515: The directories
        !           516: .B .
        !           517: and
        !           518: .B ..
        !           519: (initially or after a
        !           520: .BR / )
        !           521: are only matched by patterns beginning
        !           522: with an explicit period.
        !           523: The character
        !           524: .B /
        !           525: itself must be matched explicitly.
        !           526: .PP
        !           527: .PD 0
        !           528: .RS
        !           529: .TP
        !           530: .B \(**
        !           531: Matches any string, including the null string.
        !           532: .TP
        !           533: .B ?
        !           534: Matches any single character.
        !           535: .TP
        !           536: .BR \*(OK .\|.\|. \*(CK
        !           537: Matches any one of the enclosed characters.
        !           538: A pair of characters separated by
        !           539: .B -
        !           540: matches any
        !           541: character lexically between the pair, inclusive.
        !           542: If the first character following the opening
        !           543: .L \*(OK
        !           544: is a
        !           545: .L ^
        !           546: any character not enclosed is matched.
        !           547: .PD
        !           548: .RE
        !           549: .SS Quoting
        !           550: These characters have a special meaning to the shell
        !           551: and terminate a word unless quoted:
        !           552: .IP
        !           553: .L
        !           554: ;  &  (  )  |  <  >  { }
        !           555: newline space tab
        !           556: .PP
        !           557: (The characters \f5{\fP and \f5}\fP need not be quoted inside a \f5${\^}\fP construction.)
        !           558: A character may be
        !           559: .I quoted
        !           560: (i.e., made to stand for itself)
        !           561: by preceding
        !           562: it with a
        !           563: .BR \e .
        !           564: The pair
        !           565: .BR \e newline
        !           566: is ignored.
        !           567: All characters enclosed between a pair of single quote marks \f5\'\^\'\fP\^
        !           568: (except a single quote)
        !           569: are quoted.
        !           570: Inside double quote marks
        !           571: \f5"\^"\fP
        !           572: parameter and command substitution occurs and
        !           573: .B \e
        !           574: quotes the characters
        !           575: .BR \e ,
        !           576: .BR \` ,
        !           577: \f5"\fP,
        !           578: and
        !           579: .BR $ .
        !           580: .B
        !           581: "$\(**"
        !           582: is equivalent to
        !           583: \f5"$1 \|$2\fP \|.\|.\|.\f5"\fP,
        !           584: whereas
        !           585: .B
        !           586: "$@"
        !           587: is equivalent to
        !           588: .B
        !           589: "$1"\|
        !           590: .B
        !           591: "$2"\|
        !           592: \&.\|.\|.\|.
        !           593: .SS Prompting
        !           594: When used interactively,
        !           595: the shell prompts with the value of
        !           596: .SM
        !           597: .B PS1
        !           598: before reading a command.
        !           599: If at any time a newline is typed and further input is needed
        !           600: to complete a command, the secondary prompt
        !           601: (i.e., the value of
        !           602: .BR \s-1PS2\s+1 )
        !           603: is issued.
        !           604: .SS Input/Output
        !           605: Before a command is executed, its input and output
        !           606: may be redirected using a special notation interpreted by the shell.
        !           607: The following may appear anywhere in a simple-command
        !           608: or may precede or follow a
        !           609: .I command
        !           610: and are not
        !           611: passed on to the invoked command;
        !           612: substitution occurs before
        !           613: .I word
        !           614: or
        !           615: .I digit
        !           616: is used:
        !           617: .PP
        !           618: .PD 0
        !           619: .TP 14
        !           620: .BI < word
        !           621: Use file
        !           622: .I word
        !           623: as standard input (file descriptor 0).
        !           624: .TP
        !           625: .BI > word
        !           626: Use file
        !           627: .I word
        !           628: as standard output (file descriptor 1).
        !           629: If the file does not exist it is created;
        !           630: otherwise, it is truncated to zero length.
        !           631: .TP
        !           632: .BI >> word
        !           633: Use file
        !           634: .I word
        !           635: as standard output.
        !           636: If the file exists output is appended to it (by first seeking to the end-of-file);
        !           637: otherwise, the file is created.
        !           638: .TP
        !           639: .BI << word
        !           640: The shell input is read up to a line that is the same as
        !           641: .IR word ,
        !           642: or to an end-of-file.
        !           643: The resulting document becomes
        !           644: the standard input.
        !           645: If any character of
        !           646: .I word
        !           647: is quoted, no interpretation
        !           648: is placed upon the characters of the document;
        !           649: otherwise, parameter and command substitution occurs,
        !           650: (unescaped)
        !           651: .BR \e newline
        !           652: is ignored,
        !           653: and
        !           654: .B \e
        !           655: must be used to quote the characters
        !           656: .BR \e ,
        !           657: .BR $ ,
        !           658: .BR \` ,
        !           659: and the first character of
        !           660: .IR word .
        !           661: .TP
        !           662: .BI <& digit
        !           663: Use the file associated with file descriptor
        !           664: .I digit
        !           665: as standard input.
        !           666: Similarly for the standard output using
        !           667: .BI >& digit .
        !           668: .TP
        !           669: .B <&-
        !           670: The standard input is closed.
        !           671: Similarly for the standard output using
        !           672: .BR >&- .
        !           673: .PD
        !           674: .PP
        !           675: If any of the above is preceded by a digit,
        !           676: the
        !           677: file descriptor which will be associated with the file
        !           678: is that specified
        !           679: by the digit
        !           680: (instead of the default 0 or 1).
        !           681: For example:
        !           682: .IP
        !           683: .RB .\|.\|. " 2>&1"
        !           684: .PP
        !           685: associates file descriptor 2 with the file currently associated with
        !           686: file descriptor 1.
        !           687: .PP
        !           688: The order in which redirections are specified is significant.
        !           689: The shell evaluates redirections left-to-right.
        !           690: For example:
        !           691: .IP
        !           692: .RB .\|.\|. " 1>xxx 2>&1"
        !           693: .PP
        !           694: first associates file descriptor 1 with file
        !           695: .LR xxx ,
        !           696: then associates file descriptor 2 with the same file as
        !           697: descriptor 1, namely
        !           698: .LR xxx ,
        !           699: while
        !           700: .IP
        !           701: .RB .\|.\|. " 2>&1 1>xxx"
        !           702: .PP
        !           703: associates file descriptor 2 
        !           704: with the current value of file descriptor 1 (typically the terminal)
        !           705: and file descriptor 1 with
        !           706: .LR xxx .
        !           707: .PP
        !           708: If a command is followed by
        !           709: .BR & ,
        !           710: the default standard input
        !           711: for the command
        !           712: is the empty file
        !           713: .BR /dev/null .
        !           714: Otherwise, the environment for the execution of a command contains the
        !           715: file descriptors of the invoking shell as modified by
        !           716: input/output specifications.
        !           717: .SS Environment
        !           718: The
        !           719: .I environment
        !           720: is a list of strings, conventionally function definitions
        !           721: and name-value pairs, that is passed to
        !           722: an executed program in the same way as a normal argument list; see
        !           723: .IR environ (5).
        !           724: The shell interacts with the environment in several ways.
        !           725: On invocation, the shell scans the environment
        !           726: and creates a
        !           727: parameter or function
        !           728: for each name found,
        !           729: giving it the corresponding value.
        !           730: If the user modifies the value of any of these
        !           731: parameters
        !           732: or creates new parameters,
        !           733: none of these affects the environment
        !           734: unless the
        !           735: .B export
        !           736: command is used to bind the shell's
        !           737: parameter
        !           738: to the environment; see also
        !           739: .BR "set -a" .
        !           740: A parameter may be removed from the environment
        !           741: with the
        !           742: .B unset
        !           743: command.
        !           744: The environment seen by any executed command is thus composed
        !           745: of any unmodified name-value pairs originally inherited by the shell,
        !           746: minus any pairs removed by
        !           747: .BR unset ,
        !           748: plus any modifications or additions,
        !           749: all of which must be noted in
        !           750: .B export
        !           751: commands.
        !           752: .PP
        !           753: The environment for any
        !           754: .I simple-command
        !           755: may be augmented by prefixing it with one or more assignments to
        !           756: parameters (but not functions).
        !           757: Thus
        !           758: .L tabs
        !           759: gets the same environment in both lines below,
        !           760: but the shell has one less variable in the second.
        !           761: .IP
        !           762: .B (export TERM; TERM=450; cmd)
        !           763: .br
        !           764: .B TERM=450 cmd 
        !           765: .PP
        !           766: If the
        !           767: .B -k
        !           768: flag is set,
        !           769: .I all
        !           770: keyword arguments are placed in the environment,
        !           771: even if they occur after the command name.
        !           772: .SS Signals
        !           773: .B SIGINT
        !           774: and
        !           775: .B SIGQUIT
        !           776: (see
        !           777: .IR signal (2))
        !           778: for an invoked
        !           779: command are ignored if the command is followed by
        !           780: .BR & ;
        !           781: otherwise signals have the values
        !           782: inherited by the shell from its parent
        !           783: (but see also
        !           784: the
        !           785: .B trap
        !           786: command below).
        !           787: .SS Execution
        !           788: Each time a command is executed, the above substitutions are
        !           789: carried out.
        !           790: If the command name matches the name of a defined function, the function is executed
        !           791: in the shell process.
        !           792: (Note how this differs from calling a shell script.)
        !           793: The positional parameters
        !           794: .BR $1 ,
        !           795: .BR $2 ,
        !           796: \&.\|.\|.\|.
        !           797: are set to the arguments of the function.
        !           798: If the command name does not match a function, but matches one of the
        !           799: builtin commands
        !           800: listed below, it is executed in the shell process.
        !           801: If the command name matches neither a
        !           802: builtin command
        !           803: nor the name of a defined function,
        !           804: a new process is created and an attempt is made to
        !           805: execute the command via
        !           806: .IR exec (2).
        !           807: .PP
        !           808: The shell parameter
        !           809: .B
        !           810: .SM PATH
        !           811: defines the search path for
        !           812: the directory containing the command.
        !           813: Alternative directory names are separated by
        !           814: a colon
        !           815: .RB ( : ).
        !           816: The default path is
        !           817: .B :/bin:/usr/bin
        !           818: (specifying the current directory,
        !           819: .BR /bin ,
        !           820: and
        !           821: .BR /usr/bin ,
        !           822: in that order).
        !           823: Note that the current directory is specified by a null path name,
        !           824: which can appear immediately after the equal sign
        !           825: or between the colon delimiters anywhere else in the path list.
        !           826: If the command name contains a \f5/\fP the search path
        !           827: is not used.
        !           828: Otherwise, each directory in the path is
        !           829: searched for an executable file.
        !           830: If the file has execute permission but is not executable by
        !           831: .IR exec (2),
        !           832: it is assumed to be a `shell script', a file of shell commands.
        !           833: A sub-shell is spawned to read it.
        !           834: A parenthesized command is also executed in
        !           835: a sub-shell.
        !           836: .SS Builtin Commands
        !           837: Input/output redirection is permitted for these commands.
        !           838: File descriptor 1 is the default output location.
        !           839: .PP
        !           840: .PD 0
        !           841: .TP
        !           842: .B :
        !           843: No effect; the command does nothing.
        !           844: A zero exit code is returned.
        !           845: .br
        !           846: .TP
        !           847: .BI ". " file
        !           848: Read and execute commands from
        !           849: .I file
        !           850: and return.
        !           851: The search path
        !           852: specified by
        !           853: .B
        !           854: .SM PATH
        !           855: is used to find the directory containing
        !           856: .IR file .
        !           857: .TP
        !           858: \f5builtin\fP \*(OK \f2command\fP \*(CK
        !           859: Execute the builtin
        !           860: .I command
        !           861: (such as
        !           862: .BR break)
        !           863: regardless of functions defined with the same name.
        !           864: .TP
        !           865: \f5break\fP \*(OK \f2n\fP \*(CK
        !           866: Exit from the enclosing \f5for\fP or
        !           867: .B while
        !           868: loop, if any.
        !           869: If
        !           870: .I n
        !           871: is specified break
        !           872: .I n
        !           873: levels.
        !           874: .TP
        !           875: \f5continue\fP \*(OK \f2n\fP \*(CK
        !           876: Resume the next iteration of the enclosing
        !           877: \f5for\fP or
        !           878: .B while
        !           879: loop.
        !           880: If
        !           881: .I n
        !           882: is specified resume at the
        !           883: .IR n -th
        !           884: enclosing loop.
        !           885: .TP
        !           886: \f5cd\fP \*(OK \f2arg\fP \*(CK
        !           887: Change the current directory to
        !           888: .I arg.
        !           889: The shell
        !           890: parameter
        !           891: .B
        !           892: .SM HOME
        !           893: is the default
        !           894: .I arg.
        !           895: The shell parameter
        !           896: .B
        !           897: .SM CDPATH
        !           898: defines the search path for
        !           899: the directory containing
        !           900: .IR arg .
        !           901: Alternative directory names are separated by
        !           902: a colon
        !           903: .RB ( : ).
        !           904: The current directory (default) is specified by a null path name,
        !           905: which can appear immediately after the equal sign
        !           906: or between the colon delimiters anywhere else in the path list.
        !           907: If
        !           908: .I arg
        !           909: begins with a
        !           910: .L /
        !           911: the search path
        !           912: is not used.
        !           913: Otherwise, each directory in the path is
        !           914: searched for
        !           915: .I arg.
        !           916: .TP
        !           917: \f5eval\fP \*(OK \f2arg\fP .\|.\|. \*(CK
        !           918: The arguments are read as input
        !           919: to the shell
        !           920: and the resulting command(s) executed.
        !           921: .TP
        !           922: \f5exec\fP \*(OK \f2arg\fP .\|.\|. \*(CK
        !           923: The non-builtin command specified by
        !           924: the arguments is executed in place of this shell
        !           925: without creating a new process.
        !           926: Input/output arguments may appear and, if no other
        !           927: arguments are given, cause the shell
        !           928: input/output to be modified.
        !           929: .TP
        !           930: \f5exit\fP \*(OK \f2n\fP \*(CK
        !           931: Causes a shell to exit
        !           932: with the exit status specified by
        !           933: .IR n .
        !           934: If
        !           935: .I n
        !           936: is omitted the exit status is that of the last command executed
        !           937: (an end-of-file will also cause the shell to exit.)
        !           938: .TP
        !           939: \f5export\fP \*(OK \f2name\fP .\|.\|. \*(CK
        !           940: The given
        !           941: .I names
        !           942: are marked
        !           943: for automatic export to the
        !           944: .I environment
        !           945: of subsequently-executed commands.
        !           946: If no arguments are given, a list of all
        !           947: names that are exported in this shell is printed.
        !           948: .TP
        !           949: \f5read\fP \*(OK \f2name\fP .\|.\|. \*(CK
        !           950: One line is read from the standard input and
        !           951: the first
        !           952: word is assigned to the first
        !           953: .I name,
        !           954: the second word
        !           955: to the second
        !           956: .I name,
        !           957: etc., with leftover words assigned to the last
        !           958: .I name.
        !           959: The return code is 0 unless an end-of-file is encountered.
        !           960: .TP
        !           961: \f5return\fP \*(OK \f2n\fP \*(CK
        !           962: Causes a function to exit with the return value specified by
        !           963: .I n.
        !           964: If
        !           965: .I n
        !           966: is omitted, the return status is that of the last command executed.
        !           967: .TP
        !           968: \f5set\fP \*(OK \f5--aehknptuvx\fP \*(OK \f2arg\fP .\|.\|. \*(CK \*(CK
        !           969: .RS
        !           970: .TP
        !           971: .B -a
        !           972: Mark variables which are modified or created for export.
        !           973: .TP
        !           974: .B -e
        !           975: Exit immediately if a command
        !           976: exits with a non-zero exit status.
        !           977: .TP
        !           978: .B -f
        !           979: Disable file name generation
        !           980: .TP
        !           981: .B -k
        !           982: All keyword arguments are placed in the environment for a command,
        !           983: not just those that precede the command name.
        !           984: .TP
        !           985: .B -n
        !           986: Read commands but do not execute them.
        !           987: .TP
        !           988: .B -p
        !           989: Remove the definitions for all functions imported from the environment,
        !           990: and set
        !           991: .B IFS
        !           992: to blank, tab and newline.
        !           993: .TP
        !           994: .B -t
        !           995: Exit after reading and executing one command.
        !           996: .TP
        !           997: .B -u
        !           998: Treat unset variables as an error when substituting.
        !           999: .TP
        !          1000: .B -v
        !          1001: Print shell input lines as they are read.
        !          1002: .TP
        !          1003: .B -x
        !          1004: Print commands and their arguments as they are executed.
        !          1005: .TP
        !          1006: .B --
        !          1007: Do not change any of the flags; useful in setting
        !          1008: .B $1
        !          1009: to
        !          1010: .BR - .
        !          1011: .PP
        !          1012: Using
        !          1013: .B \+
        !          1014: rather than
        !          1015: .B -
        !          1016: causes these flags to be turned off.
        !          1017: These flags can also be used upon invocation of the shell.
        !          1018: The current set of flags may be found in
        !          1019: .BR $- .
        !          1020: The remaining arguments are positional
        !          1021: parameters and are assigned, in order, to
        !          1022: .BR $1 ,
        !          1023: .BR $2 ,
        !          1024: \&.\|.\|.\|.
        !          1025: If no arguments are given the values
        !          1026: of all names are printed.
        !          1027: .RE
        !          1028: .TP
        !          1029: \f5shift\fP \*(OK \f2n\fP \*(CK
        !          1030: .br
        !          1031: The positional parameters from
        !          1032: .BI $ n\fR+1
        !          1033: \&.\|.\|.
        !          1034: are renamed
        !          1035: .B $1
        !          1036: \&.\|.\|.
        !          1037: If
        !          1038: .I n
        !          1039: is not given, it is assumed to be 1.
        !          1040: .TP
        !          1041: \f5times\fP
        !          1042: .br
        !          1043: Print the accumulated user and system times for processes
        !          1044: run from the shell.
        !          1045: .TP
        !          1046: \f5trap\fP \*(OK \f2arg\fP \*(CK \*(OK \f2n\fP \*(CK .\|.\|.
        !          1047: The command
        !          1048: .I arg
        !          1049: is to be read and executed when the shell
        !          1050: receives signal(s)
        !          1051: .IR n .
        !          1052: (Note that
        !          1053: .I arg
        !          1054: is scanned once when
        !          1055: the trap is set and once when the trap
        !          1056: is taken.)
        !          1057: Trap commands are executed in order of signal number.
        !          1058: Any attempt to set a trap on a signal that
        !          1059: was ignored on entry to the current shell
        !          1060: is ineffective.
        !          1061: If
        !          1062: .I arg
        !          1063: is absent all traps
        !          1064: .I n
        !          1065: are reset
        !          1066: to their original values.
        !          1067: If
        !          1068: .I arg
        !          1069: is the null
        !          1070: string this signal is ignored by the shell and by the commands
        !          1071: it invokes.
        !          1072: If
        !          1073: .I n
        !          1074: is 0 the command
        !          1075: .I arg
        !          1076: is executed
        !          1077: on exit from the shell.
        !          1078: The
        !          1079: .B trap
        !          1080: command
        !          1081: with no arguments prints a list
        !          1082: of commands associated with each signal number.
        !          1083: .TP
        !          1084: \f5umask\fP \*(OK \f2nnn\fP \*(CK
        !          1085: The user file-creation mask is set to
        !          1086: .IR nnn ;
        !          1087: see
        !          1088: .IR umask (2).
        !          1089: If
        !          1090: .I nnn
        !          1091: is omitted, the current value of the mask is printed.
        !          1092: .TP
        !          1093: \f5unset\fP \*(OK \f2name\fP .\|.\|. \*(CK
        !          1094: For each
        !          1095: .IR name ,
        !          1096: remove the corresponding variable or function.
        !          1097: The variables
        !          1098: \f5\s-1PATH\s+1\fP, \f5\s-1PS1\s+1\fP, \f5\s-1PS2\s+1\fP and \f5\s-1IFS\s+1\fP
        !          1099: cannot be unset.
        !          1100: .TP
        !          1101: \f5wait\fP \*(OK \f2n\fP \*(CK
        !          1102: Wait for the specified process and report its termination status.
        !          1103: If
        !          1104: .I n
        !          1105: is not given all currently active child processes are waited for
        !          1106: and the return code is zero.
        !          1107: .TP
        !          1108: \f5whatis\fP \*(OK \fIname\fP .\|.\|. \*(CK
        !          1109: For each
        !          1110: .IR name ,
        !          1111: print the associated value as a parameter, function, builtin or executable
        !          1112: binary as appropriate.
        !          1113: In each case, the value is printed in a form that would yield the same
        !          1114: value if typed as input to the shell itself:
        !          1115: parameters are printed as assignments, functions as their definitions,
        !          1116: builtins as calls to
        !          1117: .BR builtin ,
        !          1118: and binaries as their full pathnames.
        !          1119: .PD
        !          1120: .PP
        !          1121: .SS Invocation
        !          1122: Normally the shell reads commands from the file named in its
        !          1123: first argument (standard input default).
        !          1124: The remaining arguments are interpreted as position parameters; see
        !          1125: `Parameter substitution' above.
        !          1126: If the shell is invoked through
        !          1127: .IR exec (2)
        !          1128: and the first character of argument zero
        !          1129: is
        !          1130: .BR - ,
        !          1131: commands are read first from
        !          1132: .BR $HOME/.profile ,
        !          1133: if it exists.
        !          1134: Certain options modify this behavior:
        !          1135: .PP
        !          1136: .PD 0
        !          1137: .TP 10
        !          1138: .BI -c "\| string"
        !          1139: Read commands from
        !          1140: .IR string ;
        !          1141: ignore remaining arguments.
        !          1142: .TP
        !          1143: .B -s
        !          1144: Write shell output (except for builtin commands)
        !          1145: on file descriptor 2.
        !          1146: .TP
        !          1147: .B -i
        !          1148: Interactive.
        !          1149: Ignore signal
        !          1150: .B SIGTERM
        !          1151: (interactive shell is immune to
        !          1152: .BR "kill 0" ).
        !          1153: Catch and ignore
        !          1154: .B SIGINT
        !          1155: .RB ( wait
        !          1156: is interruptible).
        !          1157: The shell always ignores
        !          1158: .BR SIGQUIT .
        !          1159: .PD
        !          1160: .PP
        !          1161: Other options are described under the
        !          1162: .B set
        !          1163: command above.
        !          1164: .SH FILES
        !          1165: .F $HOME/.profile
        !          1166: .br
        !          1167: .F /tmp/sh*
        !          1168: .br
        !          1169: .F /dev/null
        !          1170: .SH SEE ALSO
        !          1171: .IR = (1),
        !          1172: .IR echo (1),
        !          1173: .IR newgrp (1),
        !          1174: .IR test (1),
        !          1175: .IR dup (2),
        !          1176: .IR exec (2),
        !          1177: .IR fork (2),
        !          1178: .IR pipe (2),
        !          1179: .IR signal (2),
        !          1180: .IR umask (2),
        !          1181: .IR exit (2),
        !          1182: .IR environ (5)
        !          1183: .br
        !          1184: B. W. Kernighan and R. Pike,
        !          1185: .I The Unix Programming Environment,
        !          1186: Prentice-Hall, 1984
        !          1187: .SH DIAGNOSTICS
        !          1188: Errors detected by the shell, such as syntax errors,
        !          1189: cause the shell
        !          1190: to return a non-zero exit status.
        !          1191: If the shell is being used non-interactively
        !          1192: execution of the shell file is abandoned.
        !          1193: Otherwise, the shell returns the exit status of
        !          1194: the last command executed; see also the
        !          1195: .B exit
        !          1196: command.
        !          1197: .SH BUGS
        !          1198: Errors arising from builtins terminate shell scripts.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.