|
|
1.1 ! root 1: .TH SH 1 "7 February 1983" ! 2: .SH NAME ! 3: sh, for, case, if, while, \fB:\fP, \fB.\fP, break, continue, cd, eval, exec, exit, export, login, read, readonly, set, shift, times, trap, umask, wait \- command language ! 4: .SH SYNOPSIS ! 5: .B sh ! 6: [ ! 7: .B \-ceiknrstuvx ! 8: ] [ arg ] ... ! 9: .ds OK [\| ! 10: .ds CK \|] ! 11: .ds LT \s-2<\s0 ! 12: .ds GT \s-2>\s0 ! 13: .ds LE \s-2<\s0 ! 14: .ds ST * ! 15: .SH DESCRIPTION ! 16: .I Sh ! 17: is a command programming language that executes commands read from a terminal ! 18: or a file. See ! 19: .B invocation ! 20: for the meaning of arguments to the shell. ! 21: .PP ! 22: .B Commands. ! 23: .br ! 24: A ! 25: .I simple-command ! 26: is a sequence of non blank ! 27: .I words ! 28: separated by blanks (a blank is a ! 29: .B tab ! 30: or a ! 31: .BR space ). ! 32: The first word specifies the name of the command to be executed. ! 33: Except as specified below the remaining words are passed as arguments ! 34: to the invoked command. ! 35: The command name is passed as argument 0 (see ! 36: .IR execve (2)). ! 37: The ! 38: .I value ! 39: of a simple-command is its exit status ! 40: if it terminates normally or 200+\fIstatus\fP if it terminates abnormally (see ! 41: .IR sigvec (2) ! 42: for a list of status values). ! 43: .LP ! 44: A ! 45: .I pipeline ! 46: is a sequence of one or more ! 47: .I commands ! 48: separated by ! 49: .B \(or. ! 50: The standard output of each command but the last is connected by a ! 51: .IR pipe (2) ! 52: to the standard input of the next command. ! 53: Each command is run as a separate process; ! 54: the shell waits for the last command to terminate. ! 55: .LP ! 56: A ! 57: .I list ! 58: is a sequence of one or more ! 59: .I pipelines ! 60: separated by ! 61: .BR ; , ! 62: .BR & , ! 63: .B && ! 64: or ! 65: .B \(or\|\(or ! 66: and optionally terminated by ! 67: .B ; ! 68: or ! 69: .BR & . ! 70: .B ; ! 71: and ! 72: .B & ! 73: have equal precedence which is lower than that of ! 74: .B && ! 75: and ! 76: .BR \(or\|\(or , ! 77: .B && ! 78: and ! 79: .B \(or\|\(or ! 80: also have equal precedence. ! 81: A semicolon causes sequential execution; an ampersand causes the preceding ! 82: .I pipeline ! 83: to be executed without waiting for it to finish. The symbol ! 84: .B && ! 85: .RB ( \(or\|\(or ) ! 86: causes the ! 87: .I list ! 88: following to be executed only if the preceding ! 89: .I pipeline ! 90: returns a zero (non zero) value. Newlines may appear in a ! 91: .I list, ! 92: instead of semicolons, to delimit commands. ! 93: .LP ! 94: A ! 95: .I command ! 96: is either a simple-command or one of the following. ! 97: The value returned by a command is that of the ! 98: last simple-command executed in the command. ! 99: .TP ! 100: \fBfor \fIname\fR \*(OK\fBin \fIword\fR ...\*(CK \fBdo \fIlist \fBdone\fR ! 101: Each time a ! 102: .B for ! 103: command is executed ! 104: .I name ! 105: is set to the next word in the ! 106: .B for ! 107: word list ! 108: If ! 109: .BI in \ word ! 110: \&... ! 111: is omitted, ! 112: .B ! 113: in "$@" ! 114: is assumed. Execution ends when there are no more words in the list. ! 115: .TP ! 116: \fBcase \fIword \fBin\fR \*(OK\fIpattern \fR\*(OK \fB\(or \fIpattern \fR\*(CK ... \fB) \fIlist \fB;;\fR\*(CK ... \fBesac\fR ! 117: A ! 118: .B case ! 119: command executes the ! 120: .I list ! 121: associated with the first pattern that matches ! 122: .I word. ! 123: The form of the patterns is the same as that used for file name generation. ! 124: .TP ! 125: \fBif \fIlist \fBthen \fIlist\fR \*(OK\fBelif \fIlist \fBthen \fIlist\fR\*(CK ... \*(OK\fBelse \fIlist\fR\*(CK \fBfi\fR ! 126: The ! 127: .I list ! 128: following ! 129: .B if ! 130: is executed and if it returns zero the ! 131: .I list ! 132: following ! 133: .B then ! 134: is executed. Otherwise, the ! 135: .I list ! 136: following ! 137: .B elif ! 138: is executed and if its value is zero the ! 139: .I list ! 140: following ! 141: .B then ! 142: is executed. Failing that the ! 143: .B else ! 144: .I list ! 145: is executed. ! 146: .TP ! 147: \fBwhile \fIlist\fR \*(OK\fBdo \fIlist\fR\*(CK \fBdone\fR ! 148: A ! 149: .B while ! 150: command repeatedly executes the ! 151: .B while ! 152: .I list ! 153: and if its value is zero executes the ! 154: .B do ! 155: .I list; ! 156: otherwise the loop terminates. The value returned by a ! 157: .B while ! 158: command is that of the last executed command in the ! 159: .B do ! 160: .I list. ! 161: .B until ! 162: may be used in place of ! 163: .B while ! 164: to negate the loop termination test. ! 165: .TP ! 166: .BI ( " list " ) ! 167: Execute ! 168: .I list ! 169: in a subshell. ! 170: .TP ! 171: .BI { " list " } ! 172: .I list ! 173: is simply executed. ! 174: .LP ! 175: The following words are only recognized as the first word of a command ! 176: and when not quoted. ! 177: .IP ! 178: .B ! 179: if then else elif fi case in esac for while until do done { } ! 180: .PP ! 181: .B Command substitution. ! 182: .br ! 183: The standard output from a command enclosed in a pair of back quotes ! 184: .RB ( \`\|\` ) ! 185: may be used as part or all of a word; trailing newlines are removed. ! 186: .PP ! 187: .B Parameter substitution. ! 188: .br ! 189: The character ! 190: .B $ ! 191: is used to introduce substitutable parameters. ! 192: Positional parameters may be assigned values by ! 193: .BR set . ! 194: Variables may be set by writing ! 195: .IP ! 196: .IB name = value ! 197: [ ! 198: .IB name = value ! 199: ] ... ! 200: .TP ! 201: $\fB\|{\fIparameter\fB\|}\fR ! 202: A ! 203: .I parameter ! 204: is a sequence of letters, digits or underscores (a ! 205: .IR name ), ! 206: a digit, or any of the characters ! 207: .B ! 208: * @ # ? \- $ !\|. ! 209: The value, if any, of the parameter is substituted. ! 210: The braces are required only when ! 211: .I parameter ! 212: is followed by a letter, digit, or underscore ! 213: that is not to be interpreted as part of its name. If ! 214: .I parameter ! 215: is a digit, it is a positional parameter. If ! 216: .I parameter ! 217: is ! 218: .BR * " or" " @" ! 219: then all the positional parameters, starting with ! 220: .SM ! 221: .BR $1 , ! 222: are substituted separated by spaces. ! 223: .SM ! 224: .B $0 ! 225: is set from argument zero when the shell is invoked. ! 226: .TP ! 227: $\fB\|{\fIparameter\|\-word\|\fB}\fR ! 228: If ! 229: .I parameter ! 230: is set, substitute its value; otherwise substitute ! 231: .I word. ! 232: .TP ! 233: $\fB\|{\fIparameter\|\(eq\|word\|\fB}\fR ! 234: If ! 235: .I parameter ! 236: is not set, set it to ! 237: .I word; ! 238: the value of the parameter is then substituted. ! 239: Positional parameters may not be assigned to in this way. ! 240: .TP ! 241: $\fB\|{\fIparameter\|?\|word\|\fB}\fR ! 242: If ! 243: .I parameter ! 244: is set, substitute its value; otherwise, print ! 245: .I word ! 246: and exit from the shell. If ! 247: .I word ! 248: is omitted, a standard message is printed. ! 249: .TP ! 250: $\fB\|{\fIparameter\|\(plword\|\fB}\fR ! 251: If ! 252: .I parameter ! 253: is set, substitute ! 254: .I word; ! 255: otherwise substitute nothing. ! 256: .LP ! 257: In the above ! 258: .I word ! 259: is not evaluated unless it is to be used as the substituted string. ! 260: (So that, for example, echo ${d\-\'pwd\'} will only execute ! 261: .I pwd ! 262: if ! 263: .I d ! 264: is unset.) ! 265: .LP ! 266: The following ! 267: .I parameters ! 268: are automatically set by the shell. ! 269: .RS ! 270: .TP ! 271: .B # ! 272: The number of positional parameters in decimal. ! 273: .PD 0 ! 274: .TP ! 275: .B \- ! 276: Options supplied to the shell on invocation or by ! 277: .BR set . ! 278: .TP ! 279: .B ? ! 280: The value returned by the last executed command in decimal. ! 281: .TP ! 282: .B $ ! 283: The process number of this shell. ! 284: .TP ! 285: .B ! ! 286: The process number of the last background command invoked. ! 287: .PD ! 288: .RE ! 289: .LP ! 290: The following ! 291: .I parameters ! 292: are used but not set by the shell. ! 293: .RS ! 294: .TP ! 295: .B ! 296: .SM HOME ! 297: The default argument (home directory) for the ! 298: .B cd ! 299: command. ! 300: .PD 0 ! 301: .TP ! 302: .B ! 303: .SM PATH ! 304: The search path for commands (see ! 305: .BR execution ). ! 306: .TP ! 307: .B ! 308: .SM MAIL ! 309: If this variable is set to the name of ! 310: a mail file, the shell informs the user of ! 311: the arrival of mail in the specified file. ! 312: .SM ! 313: .TP ! 314: .B PS1 ! 315: Primary prompt string, by default '$ '. ! 316: .TP ! 317: .SM ! 318: .B PS2 ! 319: Secondary prompt string, by default '> '. ! 320: .TP ! 321: .SM ! 322: .B IFS ! 323: Internal field separators, normally ! 324: .BR space , ! 325: .BR tab , ! 326: and ! 327: .BR newline . ! 328: .PD ! 329: .RE ! 330: .PP ! 331: .B Blank interpretation. ! 332: .br ! 333: After parameter and command substitution, ! 334: any results of substitution are scanned for internal field separator ! 335: characters (those found in ! 336: .SM ! 337: .BR $IFS \*S) ! 338: and split into distinct arguments where such characters are found. ! 339: Explicit null arguments ("" or \'\') are retained. ! 340: Implicit null arguments (those resulting from ! 341: .I parameters ! 342: that have no values) are removed. ! 343: .PP ! 344: .B File name generation. ! 345: .br ! 346: Following substitution, each command word is scanned for the characters ! 347: .BR * , ! 348: .B ? ! 349: and ! 350: .B \*(OK. ! 351: If one of these characters appears, the word is regarded as a pattern. ! 352: The word is replaced with alphabetically sorted file names that match the ! 353: pattern. If no file name is found that matches the pattern, ! 354: the word is left unchanged. The character ! 355: .B . ! 356: at the start of a file name or immediately following a ! 357: .BR / , ! 358: and the character ! 359: .BR / , ! 360: must be matched explicitly. ! 361: .TP ! 362: .B \*(ST ! 363: Matches any string, including the null string. ! 364: .PD 0 ! 365: .TP ! 366: .B ? ! 367: Matches any single character. ! 368: .TP ! 369: .B \*(OK...\*(CK ! 370: Matches any one of the characters enclosed. ! 371: A pair of characters separated by ! 372: .B \- ! 373: matches any character lexically between the pair. ! 374: .PD ! 375: .PP ! 376: .B Quoting. ! 377: .br ! 378: The following characters have a special meaning to the shell ! 379: and cause termination of a word unless quoted. ! 380: .LP ! 381: \fB; & ( ) \(or \*(LT \*(GT newline space tab\fP ! 382: .LP ! 383: A character may be ! 384: .I quoted ! 385: by preceding it with a ! 386: .B ! 387: \\\|. ! 388: .B \\\\newline ! 389: is ignored. ! 390: All characters enclosed between a pair of quote marks (\fB\'\|\'\fP), ! 391: except a single quote, are quoted. Inside double quotes (\fB"\|"\fP) ! 392: parameter and command substitution occurs and ! 393: .B ! 394: \\ ! 395: quotes the characters ! 396: .B ! 397: \\ \' " ! 398: and ! 399: .BR $ \|. ! 400: .LP ! 401: .B ! 402: "$*" ! 403: is equivalent to ! 404: .SM ! 405: .B ! 406: "$1 $2 ..." ! 407: whereas ! 408: .br ! 409: .B ! 410: "$@" ! 411: is equivalent to ! 412: .SM ! 413: .B ! 414: "$1" "$2" ... . ! 415: .PP ! 416: .B Prompting. ! 417: .br ! 418: When used interactively, the shell prompts with the value of ! 419: .SM ! 420: PS1 ! 421: before reading a command. ! 422: If at any time a newline is typed and further input is needed ! 423: to complete a command, the secondary prompt ! 424: .RB ( \s-2$PS2\s0 ) ! 425: is issued. ! 426: .PP ! 427: .B Input output. ! 428: .br ! 429: Before a command is executed its input and output ! 430: may be redirected using a special notation interpreted by the shell. ! 431: The following may appear anywhere in a simple-command ! 432: or may precede or follow a ! 433: .I command ! 434: and are not passed on to the invoked command. ! 435: Substitution occurs before ! 436: .I word ! 437: or ! 438: .I digit ! 439: is used. ! 440: .TP ! 441: \*(LT\fI\|word\fP ! 442: Use file ! 443: .I word ! 444: as standard input (file descriptor 0). ! 445: .PD ! 446: .TP ! 447: \*(GT\fI\|word\fP ! 448: Use file ! 449: .I word ! 450: as standard output (file descriptor 1). ! 451: If the file does not exist, it is created; ! 452: otherwise it is truncated to zero length. ! 453: .TP ! 454: \*(GT\*(GT\fI\|word\fP ! 455: Use file ! 456: .I word ! 457: as standard output. ! 458: If the file exists, output is appended (by seeking to the end); ! 459: otherwise the file is created. ! 460: .TP ! 461: \*(LT\*(LT\fI\|word\fP ! 462: The shell input is read up to a line the same as ! 463: .IR word , ! 464: or end of file. ! 465: The resulting document becomes the standard input. ! 466: If any character of ! 467: .I word ! 468: is quoted, no interpretation is placed upon the characters of the document; ! 469: otherwise, parameter and command substitution occurs, ! 470: .B ! 471: \\newline ! 472: is ignored, and ! 473: .B ! 474: \\ ! 475: is used to quote the characters ! 476: .B ! 477: \\ $ \' ! 478: and the first character of ! 479: .I word. ! 480: .TP ! 481: \*(LT\|&\|\fIdigit\fP ! 482: The standard input is duplicated from file descriptor ! 483: .I digit; ! 484: see ! 485: .IR dup (2). ! 486: Similarly for the standard output using \*(GT\|. ! 487: .TP ! 488: \*(LT\|&\|\- ! 489: The standard input is closed. ! 490: Similarly for the standard output using \*(GT\|. ! 491: .PD ! 492: .LP ! 493: If one of the above is preceded by a digit, the ! 494: file descriptor created is that specified by the digit ! 495: (instead of the default 0 or 1). For example, ! 496: .LP ! 497: \&... 2\*(GT&1 ! 498: .LP ! 499: creates file descriptor 2 to be a duplicate ! 500: of file descriptor 1. ! 501: .LP ! 502: If a command is followed by ! 503: .B & ! 504: then the default standard input for the command is the empty file ! 505: (/dev/null). ! 506: Otherwise, the environment for the execution of a command contains the ! 507: file descriptors of the invoking shell as modified by input ! 508: output specifications. ! 509: .PP ! 510: .B Environment. ! 511: .br ! 512: The environment is a list of name-value pairs that is passed to ! 513: an executed program in the same way as a normal argument list; see ! 514: .IR execve (2) ! 515: and ! 516: .IR environ (7). ! 517: The shell interacts with the environment in several ways. ! 518: On invocation, the shell scans the environment and creates a ! 519: .I parameter ! 520: for each name found, giving it the corresponding value. ! 521: Executed commands inherit the same environment. ! 522: If the user modifies the values of these ! 523: .I parameters ! 524: or creates new ones, none of these affects the environment unless the ! 525: .B export ! 526: command is used to bind the shell's ! 527: .I parameter ! 528: to the environment. ! 529: The environment seen by any executed command is thus composed ! 530: of any unmodified name-value pairs originally inherited by the shell, ! 531: plus any modifications or additions, all of which must be noted in ! 532: .B export ! 533: commands. ! 534: .LP ! 535: The environment for any ! 536: .I simple-command ! 537: may be augmented by prefixing it with one or more assignments to ! 538: .I parameters. ! 539: Thus these two lines are equivalent ! 540: .IP ! 541: TERM=450 cmd args ! 542: .br ! 543: (export TERM; TERM=450; cmd args) ! 544: .LP ! 545: If the ! 546: .B \-k ! 547: flag is set, ! 548: .I all ! 549: keyword arguments are placed in the environment, ! 550: even if the occur after the command name. ! 551: The following prints 'a=b c' and 'c': ! 552: .nf ! 553: echo a=b c ! 554: set \-k ! 555: echo a=b c ! 556: .fi ! 557: .PP ! 558: .B Signals. ! 559: .br ! 560: The INTERRUPT and QUIT signals for an invoked ! 561: command are ignored if the command is followed by ! 562: .BR & ; ! 563: otherwise signals have the values inherited by the shell from its parent. ! 564: (But see also ! 565: .BR trap. ) ! 566: .PP ! 567: .B Execution. ! 568: .br ! 569: Each time a command is executed the above substitutions are carried out. ! 570: Except for the 'special commands' listed below a new process is created and ! 571: an attempt is made to execute the command via an ! 572: .IR execve (2). ! 573: .LP ! 574: The shell parameter ! 575: .B ! 576: .SM $PATH ! 577: defines the search path for the directory containing the command. ! 578: Each alternative directory name is separated by a colon ! 579: .RB ( : ). ! 580: The default path is ! 581: .BR :/bin:/usr/bin . ! 582: If the command name contains a /, the search path is not used. ! 583: Otherwise, each directory in the path is searched for an executable file. ! 584: If the file has execute permission but is not an ! 585: .I a.out ! 586: file, it is assumed to be a file containing shell commands. ! 587: A subshell (i.e., a separate process) is spawned to read it. ! 588: A parenthesized command is also executed in a subshell. ! 589: .PP ! 590: .B Special commands. ! 591: .br ! 592: The following commands are executed in the shell process ! 593: and except where specified ! 594: no input output redirection is permitted for such commands. ! 595: .TP ! 596: .B : ! 597: No effect; the command does nothing. ! 598: .PD 0 ! 599: .TP ! 600: .BI . \ file ! 601: Read and execute commands from ! 602: .I file ! 603: and return. The search path ! 604: .B ! 605: .SM $PATH ! 606: is used to find the directory containing ! 607: .IR file . ! 608: .TP ! 609: \fBbreak\fR \*(OK\fIn\fR\*(CK ! 610: Exit from the enclosing ! 611: .B for ! 612: or ! 613: .B while ! 614: loop, if any. ! 615: If ! 616: .I n ! 617: is specified, break ! 618: .I n ! 619: levels. ! 620: .TP ! 621: \fBcontinue\fR \*(OK\fIn\fR\*(CK ! 622: Resume the next iteration of the enclosing ! 623: .B for ! 624: or ! 625: .B while ! 626: loop. If ! 627: .I n ! 628: is specified, resume at the ! 629: .IR n -th ! 630: enclosing loop. ! 631: .TP ! 632: \fBcd\fR \*(OK\fIarg\fR\*(CK ! 633: Change the current directory to ! 634: .I arg. ! 635: The shell parameter ! 636: .B ! 637: .SM $HOME ! 638: is the default ! 639: .IR arg . ! 640: .TP ! 641: \fBeval\fR \*(OK\fIarg \fR...\*(CK ! 642: The arguments are read as input to the shell ! 643: and the resulting command(s) executed. ! 644: .TP ! 645: \fBexec\fR \*(OK\fIarg \fR...\*(CK ! 646: The command specified by the arguments is executed in place of this shell ! 647: without creating a new process. ! 648: Input output arguments may appear and if no other ! 649: arguments are given cause the shell input output to be modified. ! 650: .TP ! 651: \fBexit\fR \*(OK\fIn\fR\*(CK ! 652: Causes a non interactive shell to exit with the exit status specified by ! 653: .I n. ! 654: If ! 655: .I n ! 656: is omitted, the exit status is that of the last command executed. ! 657: (An end of file will also exit from the shell.) ! 658: .TP ! 659: \fBexport\fR \*(OK\fIname\fR ...\*(CK ! 660: The given names are marked for automatic export to the ! 661: .I environment ! 662: of subsequently-executed commands. ! 663: If no arguments are given, a list of exportable names is printed. ! 664: .TP ! 665: \fBlogin\fR \*(OK\fIarg\fR ...\*(CK ! 666: Equivalent to 'exec login arg ...'. ! 667: .TP ! 668: .BI read \ name\ ... ! 669: One line is read from the standard input; ! 670: successive words of the input are assigned to the variables ! 671: .I name ! 672: in order, with leftover words to the last variable. ! 673: The return code is 0 unless the end-of-file is encountered. ! 674: .TP ! 675: \fBreadonly\fR \*(OK\fIname \fR...\*(CK ! 676: The given names are marked readonly and ! 677: the values of the these names may not be changed ! 678: by subsequent assignment. ! 679: If no arguments are given, a list of all readonly names is printed. ! 680: .TP ! 681: \fBset\fR \*(OK\fB\-eknptuvx\fR \*(OK\fIarg \fR...\*(CK\*(CK ! 682: .RS ! 683: .PD 0 ! 684: .TP 3m ! 685: .B \-e ! 686: If non interactive, exit immediately if a command fails. ! 687: .TP ! 688: .B \-k ! 689: All keyword arguments are placed in the environment for a command, ! 690: not just those that precede the command name. ! 691: .TP ! 692: .B \-n ! 693: Read commands but do not execute them. ! 694: .TP ! 695: .B \-t ! 696: Exit after reading and executing one command. ! 697: .TP ! 698: .B \-u ! 699: Treat unset variables as an error when substituting. ! 700: .TP ! 701: .B \-v ! 702: Print shell input lines as they are read. ! 703: .TP ! 704: .B \-x ! 705: Print commands and their arguments as they are executed. ! 706: .TP ! 707: .B \- ! 708: Turn off the ! 709: .B \-x ! 710: and ! 711: .B \-v ! 712: options. ! 713: .PD ! 714: .LP ! 715: These flags can also be used upon invocation of the shell. ! 716: The current set of flags may be found in ! 717: .BR $\- . ! 718: .LP ! 719: Remaining arguments are positional ! 720: parameters and are assigned, in order, to ! 721: .SM ! 722: .BR $1 , ! 723: .SM ! 724: .BR $2 , ! 725: etc. If no arguments are given, the values of all names are printed. ! 726: .RE ! 727: .TP ! 728: .B shift ! 729: The positional parameters from ! 730: .SM ! 731: .BR $2 ... ! 732: are renamed ! 733: .SM ! 734: .BRhead 1.1; ! 735: access ; ! 736: symbols ; ! 737: locks root:1.1; strict; ! 738: comment @; ! 739: ! 740: ! 741: 1.1 ! 742: date 84.06.21.14.05.41; author root; state Exp; ! 743: branches ; ! 744: next ; ! 745: ! 746: ! 747: desc
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.