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