|
|
1.1 ! root 1: .ds OK [\| ! 2: .ds CK \|] ! 3: .ds ' \s+4\[email protected]@\'\[email protected]@\s-4 ! 4: .ds ` \s+4\[email protected]@\`\[email protected]@\s-4 ! 5: .de P ! 6: .br ! 7: .. ! 8: .TH KSH 1 ! 9: .SH NAME ! 10: ksh \- Korn shell, the not standard command programming language ! 11: .SH SYNOPSIS ! 12: .B ksh ! 13: [ ! 14: .B \-acefhikmnorstuvx ! 15: ] [ ! 16: .B \-o ! 17: option ] .\|.\|. ! 18: [ arg .\|.\|. ] ! 19: .br ! 20: .SH DESCRIPTION ! 21: .I Ksh\^ ! 22: is a command programming language ! 23: that executes commands read from a terminal ! 24: or a file. ! 25: .I Rsh\^ ! 26: is a restricted version of the standard command interpreter ! 27: .IR sh ; ! 28: it is used to set up login names and execution environments whose ! 29: capabilities are more controlled than those of the standard shell. ! 30: See ! 31: .I Invocation\^ ! 32: below ! 33: for the meaning of arguments to the shell. ! 34: .SS Definitions. ! 35: A ! 36: .I metacharacter\^ ! 37: is one of the following characters: ! 38: .RS ! 39: .PP ! 40: \f3; & ( ) \(bv < > new-line space tab\fP ! 41: .RE ! 42: .PP ! 43: A ! 44: .I blank\^ ! 45: is a ! 46: .B tab ! 47: or a ! 48: .BR space . ! 49: An ! 50: .I identifier\^ ! 51: is a sequence of letters, digits, or underscores ! 52: starting with a letter or underscore. ! 53: Identifiers are used as names for ! 54: .IR aliases , ! 55: .IR functions , ! 56: and ! 57: .IR "named parameters" . ! 58: A ! 59: .I word\^ ! 60: is a sequence of ! 61: .I characters\^ ! 62: separated by one or more non-quoted ! 63: .IR metacharacters . ! 64: .SS Commands. ! 65: A ! 66: .I simple-command\^ ! 67: is a sequence of ! 68: .I blank\^ ! 69: separated words ! 70: which may be preceded by a parameter assignment list. ! 71: (See ! 72: .I Environment\^ ! 73: below). ! 74: The first word specifies the name of the command to ! 75: be executed. ! 76: Except as specified below, ! 77: the remaining words are passed as arguments ! 78: to the invoked command. ! 79: The command name is passed as argument 0 ! 80: (see ! 81: .IR exec (2)). ! 82: The ! 83: .I value\^ ! 84: of a simple-command is its exit status ! 85: if it terminates normally, or (octal) 200+\f2status\^\fP if ! 86: it terminates abnormally (see ! 87: .IR signal (2) ! 88: for a list of ! 89: status values). ! 90: .PP ! 91: A ! 92: .I pipeline\^ ! 93: is a sequence of one or more ! 94: .I commands\^ ! 95: separated by ! 96: .BR \(bv . ! 97: The standard output of each command but the last ! 98: is connected by a ! 99: .IR pipe (2) ! 100: to the standard input of the next command. ! 101: Each command is run as a separate process; ! 102: the shell waits for the last command to terminate. ! 103: The exit status of a pipeline is the exit ! 104: status of the last command. ! 105: .PP ! 106: A ! 107: .I list\^ ! 108: is a sequence of one or more ! 109: pipelines ! 110: separated by ! 111: .BR ; , ! 112: .BR & , ! 113: .BR && , ! 114: or ! 115: .BR \(bv\|\(bv , ! 116: and optionally terminated by ! 117: .BR ; , ! 118: .BR & , ! 119: or ! 120: .BR \(bv& . ! 121: Of these five symbols, ! 122: .BR ; , ! 123: .BR & , ! 124: and ! 125: .BR \(bv& ! 126: have equal precedence, ! 127: which is lower than that of ! 128: .B && ! 129: and ! 130: .BR \(bv\|\(bv . ! 131: The symbols ! 132: .B && ! 133: and ! 134: .B \(bv\|\(bv ! 135: also have equal precedence. ! 136: A semicolon ! 137: .RB ( ; ) ! 138: causes sequential execution of the preceding pipeline; an ampersand ! 139: .RB ( & ) ! 140: causes asynchronous execution of the preceding pipeline (i.e., the shell does ! 141: .I not\^ ! 142: wait for that pipeline to finish). ! 143: The symbol ! 144: .B \(bv& ! 145: causes asynchronous execution of the preceding command or pipeline ! 146: with a two-way pipe established to the parent shell. ! 147: The standard input and output of the spawned command ! 148: can be written to and read from by the parent Shell ! 149: using the ! 150: .B \-p ! 151: option of ! 152: the special commands ! 153: .B read ! 154: and ! 155: .B print\^ ! 156: described later. ! 157: Only one such command can be active ! 158: at any given time. ! 159: The symbol ! 160: .B && ! 161: .RB (\| \(bv\|\(bv \^) ! 162: causes the ! 163: .I list\^ ! 164: following it to be executed only if the preceding ! 165: pipeline ! 166: returns a zero (non-zero) value. ! 167: An arbitrary number of new-lines may appear in a ! 168: .I list,\^ ! 169: instead of semicolons, ! 170: to delimit commands. ! 171: .PP ! 172: A ! 173: .I command\^ ! 174: is either a simple-command ! 175: or one of the following. ! 176: Unless otherwise stated, ! 177: the value returned by a command is that of the ! 178: last simple-command executed in the command. ! 179: .TP ! 180: \f3for\fP \f2identifier\^\fP \*(OK \f3in\fP \f2word\^\fP .\|.\|. \*(CK \f3do\fP \f2list\^\fP \f3done\fP ! 181: Each time a ! 182: .B for ! 183: command is executed, ! 184: .I identifier\^ ! 185: is set to the next ! 186: .I word\^ ! 187: taken from the ! 188: .B in ! 189: .I word\^ ! 190: list. ! 191: If ! 192: .BI in " word\^" ! 193: \&.\|.\|. ! 194: is omitted, then ! 195: the ! 196: .B for ! 197: command executes the \f3do\fP \f2list\^\fP once for each positional parameter ! 198: that is set ! 199: (see ! 200: .I "Parameter Substitution\^" ! 201: below). ! 202: Execution ends when there are no more words in the list. ! 203: .TP ! 204: \f3select\fP \f2identifier\^\fP \*(OK \f3in\fP \f2word\^\fP .\|.\|. \*(CK \f3do\fP \f2list\^\fP \f3done\fP ! 205: A ! 206: .B select ! 207: command prints on standard error (file descriptor 2), the set of ! 208: .IR word s, ! 209: each preceded by a number. ! 210: If ! 211: .BI in " word\^" ! 212: \&.\|.\|. ! 213: is omitted, then ! 214: the ! 215: positional parameters ! 216: are used instead ! 217: (see ! 218: .I "Parameter Substitution\^" ! 219: below). ! 220: The ! 221: .SM ! 222: .B PS3 ! 223: prompt is printed ! 224: and a line is read from the standard input. ! 225: If this line consists of the number ! 226: of one of the listed ! 227: .BR word s, ! 228: then the value of the parameter ! 229: .I identifier\^ ! 230: is set to the ! 231: .I word\^ ! 232: corresponding to this number. ! 233: If this line is empty the selection list is ! 234: printed again. ! 235: Otherwise the value of the parameter ! 236: .I identifier\^ ! 237: is set to ! 238: .BR null . ! 239: The contents of the line read from standard input is ! 240: saved in ! 241: the parameter ! 242: .SM ! 243: .BR REPLY. ! 244: The ! 245: .I list\^ ! 246: is executed for each selection until a ! 247: .B break\^ ! 248: or ! 249: .I end-of-file\^ ! 250: is encountered. ! 251: .TP ! 252: \f3case\fP \f2word\^\fP \f3in\fP \*(OK \f2pattern\^\fP \*(OK \(bv \ ! 253: \f2pattern\^\fP \*(CK .\|.\|. \f3)\fP \f2list\^\fP \f3;;\fP \*(CK .\|.\|. \f3esac\fP ! 254: A ! 255: .B case ! 256: command executes the ! 257: .I list\^ ! 258: associated with the first ! 259: .I pattern\^ ! 260: that matches ! 261: .IR word . ! 262: The form of the patterns is ! 263: the same as that used for ! 264: file-name generation (see ! 265: .I "File Name Generation\^" ! 266: below). ! 267: .TP ! 268: \f3if\fP \f2list\^\fP \f3then\fP \f2list\^\fP \*(OK \ ! 269: \f3elif\fP \f2list\^\fP \f3then\fP \f2list\^\fP \*(CK .\|.\|. \ ! 270: \*(OK \f3else\fP \f2list\^\fP \*(CK \f3f\&i\fP ! 271: The ! 272: .I list\^ ! 273: following \f3if\fP is executed and, ! 274: if it ! 275: returns a zero exit status, the ! 276: .I list\^ ! 277: following ! 278: the first ! 279: .B then ! 280: is executed. ! 281: Otherwise, the ! 282: .I list\^ ! 283: following \f3elif\fP ! 284: is executed and, if its value is zero, ! 285: the ! 286: .I list\^ ! 287: following ! 288: the next ! 289: .B then ! 290: is executed. ! 291: Failing that, the ! 292: .B else ! 293: .I list\^ ! 294: is executed. ! 295: If no ! 296: .B else ! 297: .I list\^ ! 298: or ! 299: .B then ! 300: .I list\^ ! 301: is executed, then the ! 302: .B if ! 303: command returns a zero exit status. ! 304: .TP ! 305: .PD 0 ! 306: \f3while\fP \f2list\^\fP \f3do\fP \f2list\^\fP \f3done\fP ! 307: .TP ! 308: \f3until\fP \f2list\^\fP \f3do\fP \f2list\^\fP \f3done\fP ! 309: .PD ! 310: A ! 311: .B while ! 312: command repeatedly executes the ! 313: .B while ! 314: .I list\^ ! 315: and, if the exit status of the last command in the list is zero, executes ! 316: the ! 317: .B do ! 318: .IR list ; ! 319: otherwise the loop terminates. ! 320: If no commands in the ! 321: .B do ! 322: .I list\^ ! 323: are executed, then the ! 324: .B while ! 325: command returns a zero exit status; ! 326: .B until ! 327: may be used in place of ! 328: .B while ! 329: to negate ! 330: the loop termination test. ! 331: .TP ! 332: \f3(\fP\f2list\^\fP\f3)\fP ! 333: .br ! 334: Execute ! 335: .I list\^ ! 336: in a separate environment. ! 337: Note, that if two adjacent open parentheses are ! 338: needed for nesting, a space must be inserted to avoid ! 339: arithmetic evaluation as described below. ! 340: .TP ! 341: \f3{ \fP\f2list\^\fP\f3;}\fP ! 342: .br ! 343: .I list\^ ! 344: is simply executed. ! 345: Note that ! 346: .B { ! 347: is a ! 348: .I keyword\^ ! 349: and requires a blank ! 350: in order to be recognized. ! 351: .TP ! 352: .PD 0 ! 353: \f3function\fP \f2identifier\^\fP \f3{\fP \f2list\^\fP \f3;}\fP ! 354: .TP ! 355: \f2identifier\^\fP \f3() {\fP \f2list\^\fP \f3;}\fP ! 356: .PD ! 357: Define a function which is referenced by ! 358: .IR identifier . ! 359: The body of the function is the ! 360: .I list\^ ! 361: of commands between ! 362: .B { ! 363: and ! 364: .BR } . ! 365: (See ! 366: .I Functions\^ ! 367: below). ! 368: .TP ! 369: \f3time \fP\f2pipeline\^\fP ! 370: .br ! 371: The ! 372: .I pipeline\^ ! 373: is executed and the elapsed time as well as ! 374: the user and system time are printed on standard error. ! 375: .PP ! 376: The following keywords ! 377: are only recognized as the first word of a command ! 378: and when not quoted: ! 379: .if t .RS ! 380: .PP ! 381: .B ! 382: .if n if then else elif fi case esac for while until do done { } function select time ! 383: .if t if then else elif fi case esac for while until do done { } function select time ! 384: .if t .RE ! 385: .SS Comments. ! 386: A word beginning with ! 387: .B # ! 388: causes that word and all the following characters up to a new-line ! 389: to be ignored. ! 390: .SS Aliasing. ! 391: The first word of each command is replaced by the text of an ! 392: .B alias ! 393: if an ! 394: .B alias ! 395: for this word has been defined. ! 396: The ! 397: first character of an ! 398: .B alias ! 399: name can be any printable character, ! 400: but the rest of the characters ! 401: must be the same as for a valid ! 402: .IR identifier . ! 403: The replacement string can contain any ! 404: valid Shell script ! 405: including the metacharacters listed above. ! 406: The first word of each command of the ! 407: replaced text will not be tested for additional aliases. ! 408: If the last character of the alias value is a ! 409: .I blank\^ ! 410: then the word following the alias will also be checked for alias ! 411: substitution. ! 412: Aliases can be used to redefine special ! 413: builtin commands but cannot be used to redefine ! 414: the keywords listed above. ! 415: Aliases can be created, listed, and exported with the ! 416: .B alias ! 417: command and can be removed with the ! 418: .B unalias ! 419: command. ! 420: Exported aliases remain in effect for sub-shells ! 421: but must be reinitialized for separate invocations ! 422: of the Shell (See ! 423: .I Invocation\^ ! 424: below). ! 425: .PP ! 426: .I Aliasing\^ ! 427: is performed when ! 428: scripts are read, ! 429: not while they are executed. ! 430: Therefore, ! 431: for an alias to take effect ! 432: the ! 433: .B ! 434: alias ! 435: command has to be executed before ! 436: the command which references the alias is read. ! 437: .PP ! 438: Aliases are frequently used as a short hand for full path ! 439: names. ! 440: An option to the aliasing facility allows the value of the alias ! 441: to be automatically set to the full pathname of ! 442: the corresponding command. ! 443: These aliases are called ! 444: .I tracked ! 445: aliases. ! 446: The value of a ! 447: .I tracked ! 448: alias is defined the first time the identifier ! 449: is read and becomes undefined each time ! 450: the ! 451: .SM ! 452: .B PATH ! 453: variable is reset. ! 454: These aliases remain ! 455: .I tracked ! 456: so that the next ! 457: subsequent reference will redefine the value. ! 458: Several tracked aliases are compiled into the shell. ! 459: The ! 460: .B \-h ! 461: option of the ! 462: .B set ! 463: command makes each command name which is an ! 464: .I identifier\^ ! 465: into a tracked alias. ! 466: .PP ! 467: The following ! 468: .I exported aliases ! 469: are compiled into the shell ! 470: but can be unset or redefined: ! 471: .RS 20 ! 472: .PD 0 ! 473: .TP ! 474: .B "echo=\(fmprint \-\(fm" ! 475: .TP ! 476: .B "false=\(fmlet 0\(fm" ! 477: .TP ! 478: .B "functions=\(fmtypeset \-f\(fm" ! 479: .TP ! 480: .B "history=\(fmfc \-l\(fm" ! 481: .TP ! 482: .B "integer=\(fmtypeset \-i\(fm" ! 483: .TP ! 484: .B "nohup=\(fmnohup \(fm" ! 485: .TP ! 486: .B "pwd=\(fmprint \- $\s-1PWD\s+1\(fm" ! 487: .TP ! 488: .B "r=\(fmfc \-e \-\(fm" ! 489: .TP ! 490: .B "true=\(fm:\(fm" ! 491: .TP ! 492: .B "type=\(fmwhence \-v\(fm" ! 493: .TP ! 494: .B "hash=\(fmalias \-t\(fm" ! 495: .PD ! 496: .RE ! 497: .SS Tilde Substitution. ! 498: After alias substitution is performed, each word ! 499: is checked to see if it begins with an unquoted ! 500: .BR \(ap . ! 501: If it does, then the word up to a ! 502: .B / ! 503: is checked to see if it matches a user name in the ! 504: .B /etc/passwd ! 505: file. ! 506: If a match is found, the ! 507: .B \(ap ! 508: and the matched login name is replaced by the ! 509: login directory of the matched user. ! 510: This is called a ! 511: .I tilde ! 512: substitution. ! 513: If no match is found, the original text is left unchanged. ! 514: A ! 515: .B \(ap ! 516: by itself, or in front of a ! 517: .BR / , ! 518: is replaced by the value of the ! 519: .B ! 520: .SM HOME ! 521: parameter. ! 522: A ! 523: .B \(ap ! 524: followed by a ! 525: .B + ! 526: or ! 527: .B \- ! 528: is replaced by the value of ! 529: the parameter ! 530: .B ! 531: .SM PWD ! 532: and ! 533: .B ! 534: .SM OLDPWD ! 535: respectively. ! 536: .PP ! 537: In addition, the value of each ! 538: .I "keyword parameter" ! 539: is checked to see if it begins with a ! 540: .B \(ap ! 541: or if a ! 542: .B \(ap ! 543: appears after a ! 544: .BR : . ! 545: In either of these cases a ! 546: .I tilde ! 547: substitution is attempted. ! 548: .SS Command Substitution. ! 549: The standard output from a command enclosed in ! 550: a pair of grave accents (\^\f3\*`\^\*`\fP\^) may be used as part or all ! 551: of a word; ! 552: trailing new-lines are removed. ! 553: The command substitution ! 554: \^\f3\*`\^cat file\^\*`\fP\^ ! 555: can be replaced by the equivalent but faster ! 556: \^\f3\*`\^<file\^\*`\fP\^. ! 557: Command substitution of most special commands ! 558: that do not perform input/output redirection are ! 559: carried out without creating a separate process. ! 560: .SS Parameter Substitution. ! 561: A ! 562: .I parameter\^ ! 563: is an ! 564: .IR identifier , ! 565: a digit, ! 566: or any of the characters ! 567: .BR \(** , ! 568: .BR @ , ! 569: .BR # , ! 570: .BR ? , ! 571: .BR \- , ! 572: .BR $ , ! 573: and ! 574: .BR !\\^ . ! 575: A ! 576: .I named parameter\^ ! 577: (a parameter denoted by an identifier) ! 578: has a ! 579: .I value\^ ! 580: and zero or more ! 581: .IR attributes . ! 582: .I Named parameters \^ ! 583: can be assigned ! 584: .I values\^ ! 585: and ! 586: .I attributes ! 587: by using the ! 588: .B typeset\^ ! 589: special command. ! 590: The attributes supported by the Shell are described ! 591: later with the ! 592: .B typeset\^ ! 593: special command. ! 594: Exported parameters pass values and attributes to ! 595: sub-shells but only values to the environment. ! 596: .PP ! 597: The shell supports a limited one-dimensional array facility. ! 598: An element of an array parameter is referenced by a ! 599: .IR subscript . ! 600: A ! 601: .I subscript\^ ! 602: is denoted by a ! 603: .BR [ , ! 604: followed by an ! 605: .I arithmetic expression\^ ! 606: (see Arithmetic evaluation below) ! 607: followed by a ! 608: .BR ] . ! 609: The value of all ! 610: subscripts must be in the ! 611: range of ! 612: 0 through 511. ! 613: Arrays need not be declared. ! 614: Any reference to a named parameter ! 615: with a valid subscript is ! 616: legal and an array will be created if necessary. ! 617: Referencing an array without a subscript ! 618: is equivalent to referencing the first element. ! 619: .PP ! 620: The ! 621: .I value\^ ! 622: of a ! 623: .I named parameter\^ ! 624: may also be assigned by writing: ! 625: .RS ! 626: .PP ! 627: .IB name = value\^\| ! 628: \*(OK ! 629: .IB name = value\^ ! 630: \*(CK .\|.\|. ! 631: .RE ! 632: .PP ! 633: .PD 0 ! 634: If the integer attribute, ! 635: .BR \-i , ! 636: is set for ! 637: .I name\^ ! 638: the ! 639: .I value\^ ! 640: is subject to arithmetic evaluation as described below. ! 641: .PP ! 642: Positional parameters, ! 643: parameters denoted by a number, ! 644: may be assigned values with the ! 645: .B set\^ ! 646: special command. ! 647: Parameter ! 648: .B $0 ! 649: is set from argument zero when the shell ! 650: is invoked. ! 651: .PP ! 652: The character ! 653: .B $ ! 654: is used to introduce substitutable ! 655: .IR parameters . ! 656: .TP ! 657: \f3${\fP\f2parameter\^\fP\f3}\fP ! 658: The value, if any, of the parameter is substituted. ! 659: The braces are required when ! 660: .I parameter\^ ! 661: is followed by a letter, digit, or underscore ! 662: that is not to be interpreted as part of its name ! 663: or when a named parameter is subscripted. ! 664: If ! 665: .I parameter\^ ! 666: is a digit then it is a positional parameter. ! 667: If ! 668: .I parameter\^ ! 669: is ! 670: .BR \(** ! 671: or ! 672: .BR @ , ! 673: then all the positional ! 674: parameters, starting with ! 675: .BR $1 , ! 676: are substituted ! 677: (separated by spaces). ! 678: If an array ! 679: .I identifier\^ ! 680: with subscript ! 681: .B \(** ! 682: or ! 683: .B @ ! 684: is used, ! 685: then the value ! 686: for each of the ! 687: elements ! 688: is substituted ! 689: (separated by spaces). ! 690: .TP ! 691: \f3${#\fP\f2parameter\^\fP\f3}\fP ! 692: If ! 693: .I parameter\^ ! 694: is not ! 695: .BR \(** , ! 696: the length of the value of the ! 697: .I parameter\^ ! 698: is substituted. ! 699: Otherwise, the number of positional parameters is substituted. ! 700: .TP ! 701: \f3${#\fP\f2identifier\fP\f3[*]}\fP ! 702: The number of elements in the array ! 703: .I identifier\^ ! 704: is substituted. ! 705: .TP ! 706: \f3${\fP\f2parameter\^\fP\f3:\-\fP\f2word\^\fP\f3}\fP ! 707: If ! 708: .I parameter\^ ! 709: is set and is non-null then substitute its value; ! 710: otherwise substitute ! 711: .IR word . ! 712: .TP ! 713: \f3${\fP\f2parameter\^\fP\f3:=\fP\f2word\^\fP\f3}\fP ! 714: If ! 715: .I parameter\^ ! 716: is not set or is null then set it to ! 717: .IR word ; ! 718: the value of the parameter is then substituted. ! 719: Positional parameters may not be assigned to ! 720: in this way. ! 721: .TP ! 722: \f3${\fP\f2parameter\^\fP\f3:?\fP\f2word\^\fP\f3}\fP ! 723: If ! 724: .I parameter\^ ! 725: is set and is non-null then substitute its value; ! 726: otherwise, print ! 727: .I word\^ ! 728: and exit from the shell. ! 729: If ! 730: .I word\^ ! 731: is omitted then a standard message is printed. ! 732: .TP ! 733: \f3${\fP\f2parameter\^\fP\f3:+\fP\f2word\^\fP\f3}\fP ! 734: If ! 735: .I parameter\^ ! 736: is set and is non-null then substitute ! 737: .IR word ; ! 738: otherwise substitute nothing. ! 739: .TP ! 740: .PD 0 ! 741: \f3${\fP\f2parameter\^\fP\f3#\fP\f2pattern\^\fP\f3}\fP ! 742: .TP ! 743: \f3${\fP\f2parameter\^\fP\f3##\fP\f2pattern\^\fP\f3}\fP ! 744: .PD ! 745: If ! 746: the Shell ! 747: .I pattern\^ ! 748: matches the beginning of the value of ! 749: .IR parameter , ! 750: then the value of ! 751: this substitution is the value of the ! 752: .I parameter\^ ! 753: with the matched portion deleted; ! 754: otherwise the value of this ! 755: .I parameter\^ ! 756: is substituted. ! 757: In the first form the smallest matching pattern is deleted and in the ! 758: latter form the largest matching pattern is deleted. ! 759: .TP ! 760: .PD 0 ! 761: \f3${\fP\f2parameter\^\fP\f3%\fP\f2pattern\^\fP\f3}\fP ! 762: .TP ! 763: \f3${\fP\f2parameter\^\fP\f3%%\fP\f2pattern\^\fP\f3}\fP ! 764: .PD ! 765: If ! 766: the Shell ! 767: .I pattern\^ ! 768: matches the end of the value of ! 769: .IR parameter , ! 770: then the value of ! 771: .I parameter\^ ! 772: with the matched part deleted; ! 773: otherwise substitute the value of ! 774: .IR parameter . ! 775: In the first form the smallest matching pattern is deleted and in the ! 776: latter form the largest matching pattern is deleted. ! 777: .PD ! 778: .PP ! 779: In the above, ! 780: .I word\^ ! 781: is not evaluated unless it is ! 782: to be used as the substituted string, ! 783: so that, in the following example, ! 784: .B pwd\^ ! 785: is executed only if ! 786: .B d\^ ! 787: is not set or is null: ! 788: .RS ! 789: .PP ! 790: echo \|${d:\-\^\*`\^pwd\^\*`\^} ! 791: .RE ! 792: .PP ! 793: If the colon ( ! 794: .B : ) ! 795: is omitted from the above expressions, ! 796: then the shell only checks whether ! 797: .I parameter\^ ! 798: is set or not. ! 799: .PP ! 800: The following ! 801: parameters ! 802: are automatically set by the shell: ! 803: .RS ! 804: .PD 0 ! 805: .TP ! 806: .B # ! 807: The number of positional parameters in decimal. ! 808: .TP ! 809: .B \- ! 810: Flags supplied to the shell on invocation or by ! 811: the ! 812: .B set ! 813: command. ! 814: .TP ! 815: .B ? ! 816: The decimal value returned by the last executed command. ! 817: .TP ! 818: .B $ ! 819: The process number of this shell. ! 820: .TP ! 821: .B _ ! 822: The last argument of the previous command. ! 823: This parameter is not set for commands which are asynchronous. ! 824: .TP ! 825: .B ! ! 826: The process number of the last background command invoked. ! 827: .TP ! 828: .B ! 829: .SM PPID ! 830: The process number of the parent of the shell. ! 831: .TP ! 832: .B ! 833: .SM PWD ! 834: The present working directory set by the ! 835: .B cd ! 836: command. ! 837: .TP ! 838: .B ! 839: .SM OLDPWD ! 840: The previous working directory set by the ! 841: .B cd ! 842: command. ! 843: .TP ! 844: .B ! 845: .SM RANDOM ! 846: Each time this parameter is referenced, a random integer is generated. ! 847: The sequence of random numbers can be initialized by assigning ! 848: a numeric value to ! 849: .SM ! 850: .BR RANDOM . ! 851: .TP ! 852: .B ! 853: .SM REPLY ! 854: This parameter is set by the ! 855: .B select ! 856: statement and by ! 857: the ! 858: .B read ! 859: special command when no arguments are supplied. ! 860: .PD ! 861: .RE ! 862: .PP ! 863: The following ! 864: parameters ! 865: are used by the shell: ! 866: .RS ! 867: .PD 0 ! 868: .TP ! 869: .B ! 870: .SM CDPATH ! 871: The search path for the ! 872: .I cd ! 873: command. ! 874: .TP ! 875: .B ! 876: .SM COLUMNS ! 877: If this variable is set, ! 878: the value is used to define the width of the edit window ! 879: for the shell edit modes and for printing ! 880: .B select ! 881: lists. ! 882: .TP ! 883: .B ! 884: .SM EDITOR ! 885: If the value of this variable ends in ! 886: .IR emacs , ! 887: .IR gmacs , ! 888: or ! 889: .I vi ! 890: and the ! 891: .B ! 892: .SM VISUAL ! 893: variable is not set, ! 894: then the corresponding option ! 895: (see Special Command ! 896: .B set ! 897: below) ! 898: will be turned on. ! 899: .TP ! 900: .SM ! 901: .B ENV ! 902: If this parameter is set, then ! 903: parameter substitution is performed on ! 904: the value to generate ! 905: the pathname of the script that will be ! 906: executed when the ! 907: .I shell\^ ! 908: is invoked. ! 909: (See ! 910: .I Invocation\^ ! 911: below.) ! 912: This file is typically used for ! 913: .I alias ! 914: and ! 915: .I function ! 916: definitions. ! 917: .TP ! 918: .B ! 919: .SM FCEDIT ! 920: The default editor name for the ! 921: .B fc ! 922: command. ! 923: .TP ! 924: .SM ! 925: .B IFS ! 926: Internal field separators, ! 927: normally ! 928: .BR space , ! 929: .BR tab , ! 930: and ! 931: .B new-line ! 932: that is used to separate command words which result from ! 933: command or parameter substitution ! 934: and for separating words with the special command ! 935: .BR read . ! 936: .TP ! 937: .SM ! 938: .B HISTFILE ! 939: If this parameter is set when the shell is invoked, then ! 940: the value is the pathname of the file that will be ! 941: used to store the command history. ! 942: (See ! 943: .I "Command re-entry\^" ! 944: below.) ! 945: .TP ! 946: .SM ! 947: .B HISTSIZE ! 948: If this parameter is set when the shell is invoked, then ! 949: the number of previously entered commands that ! 950: are accessible by this shell ! 951: will be greater than or equal to this number. ! 952: The default is 128. ! 953: .TP ! 954: .B ! 955: .SM HOME ! 956: The default argument (home directory) for the ! 957: .B cd ! 958: command. ! 959: .TP ! 960: .B ! 961: .SM MAIL ! 962: If this parameter is set to the name of a mail file ! 963: .I and\^ ! 964: the ! 965: .B ! 966: .SM MAILPATH ! 967: parameter is not set, ! 968: then the shell informs the user of arrival of mail ! 969: in the specified file. ! 970: .TP ! 971: .B ! 972: .SM MAILCHECK ! 973: This variable specifies how often (in seconds) the ! 974: shell will check for changes in the modification time ! 975: of any of the files specified by the ! 976: .B ! 977: .SM MAILPATH ! 978: or ! 979: .B ! 980: .SM MAIL ! 981: parameters. ! 982: The default value is 600 seconds. ! 983: If set to 0, ! 984: the shell will check before each prompt. ! 985: .TP ! 986: .B ! 987: .SM MAILPATH ! 988: A colon ( ! 989: .B : ! 990: ) ! 991: separated list of file names. ! 992: If this parameter is set ! 993: then the shell informs the user of ! 994: any modifications to the specified files ! 995: that have occurred within the last ! 996: .B ! 997: .SM MAILCHECK ! 998: seconds. ! 999: Each file name can be followed by a ! 1000: .B ? ! 1001: and a message that will be printed. ! 1002: The message will undergo parameter and command substitution ! 1003: with the parameter, ! 1004: .B $_ ! 1005: defined as the name of the file that has changed. ! 1006: The default message is ! 1007: .I you have mail in $_\^. ! 1008: .TP ! 1009: .B ! 1010: .SM PATH ! 1011: The search path for commands (see ! 1012: .I Execution\^ ! 1013: below). ! 1014: The user may not change ! 1015: .B \s-1PATH\s+1 ! 1016: if executing under ! 1017: .I rsh ! 1018: (except in ! 1019: .I .profile\^ ! 1020: ). ! 1021: .TP ! 1022: .SM ! 1023: .B PS1 ! 1024: The value of this parameter is expanded for paramter ! 1025: substitution to define the ! 1026: primary prompt string which by default is ! 1027: .RB `` "$ \|" ''. ! 1028: The character ! 1029: .B ! ! 1030: in the primary prompt string is replaced by the ! 1031: .I command\^ ! 1032: number (see ! 1033: .I Command Re-entry ! 1034: below). ! 1035: .TP ! 1036: .SM ! 1037: .B PS2 ! 1038: Secondary prompt string, by default ! 1039: .RB `` "> \|" ''. ! 1040: .TP ! 1041: .SM ! 1042: .B PS3 ! 1043: Selection prompt string ! 1044: used within a ! 1045: .B select ! 1046: loop, by default ! 1047: .RB `` "#? \|" ''. ! 1048: .TP ! 1049: .SM ! 1050: .B SHELL ! 1051: The pathname of the ! 1052: .I shell\^ ! 1053: is kept in the environment. ! 1054: At invocation, if the value of this variable contains an ! 1055: .B r ! 1056: in the basename, ! 1057: then the shell becomes restricted. ! 1058: .TP ! 1059: .B ! 1060: .SM TMOUT ! 1061: If set to a value greater than zero, ! 1062: the shell will terminate if a command is not entered within ! 1063: the prescribed number of seconds. ! 1064: (Note that the shell can be compiled with a maximum bound ! 1065: for this value which cannot be exceeded.) ! 1066: .TP ! 1067: .B ! 1068: .SM VISUAL ! 1069: If the value of this variable ends in ! 1070: .IR emacs , ! 1071: .IR gmacs , ! 1072: or ! 1073: .I vi ! 1074: then the corresponding option ! 1075: (see Special Command ! 1076: .B set ! 1077: below) ! 1078: will be turned on. ! 1079: .PD ! 1080: .RE ! 1081: .PP ! 1082: The shell gives default values to ! 1083: \f3\s-1PATH\s+1\fP, \f3\s-1PS1\s+1\fP, \f3\s-1PS2\s+1\fP, \f3\s-1MAILCHECK\s+1\fP, ! 1084: \f3\s-1TMOUT\s+1\fP and \f3\s-1IFS\s+1\fP, ! 1085: while ! 1086: .SM ! 1087: .BR HOME , ! 1088: .SM ! 1089: .B SHELL ! 1090: .SM ! 1091: .B ENV ! 1092: and ! 1093: .SM ! 1094: .B MAIL ! 1095: are ! 1096: not set at all by the shell (although ! 1097: .SM ! 1098: .B HOME ! 1099: .I is\^ ! 1100: set by ! 1101: .IR login (1)). ! 1102: On some systems ! 1103: .SM ! 1104: .B MAIL ! 1105: and ! 1106: .SM ! 1107: .B SHELL ! 1108: are also ! 1109: set by ! 1110: .IR login (1)). ! 1111: .SS Blank Interpretation. ! 1112: After parameter and command substitution, ! 1113: the results of substitutions are scanned for the field separator ! 1114: characters ( ! 1115: those found in ! 1116: .SM ! 1117: .B IFS ! 1118: ) ! 1119: and split into distinct arguments where such characters are found. ! 1120: Explicit null arguments (\^\f3"\^"\fP or \f3\*\(fm\^\*\(fm\fP\^) are retained. ! 1121: Implicit null arguments ! 1122: (those resulting from ! 1123: .I parameters\^ ! 1124: that have no values) are removed. ! 1125: .SS File Name Generation. ! 1126: Following substitution, each command ! 1127: .I word\^ ! 1128: is scanned for ! 1129: the characters ! 1130: .BR \(** , ! 1131: .BR ? , ! 1132: and ! 1133: .B \*(OK\^ ! 1134: unless the ! 1135: .B \-f ! 1136: option has been ! 1137: .BR set . ! 1138: If one of these characters appears ! 1139: then the word is regarded as a ! 1140: .IR pattern . ! 1141: The word is replaced with alphabetically sorted file names that match the pattern. ! 1142: If no file name is found that matches the pattern, then ! 1143: the word is left unchanged. ! 1144: When a ! 1145: .I pattern\^ ! 1146: is used for file name generation, ! 1147: the character ! 1148: .B . ! 1149: at the start of a file name ! 1150: or immediately following a ! 1151: .BR / , ! 1152: as well as the character ! 1153: .B / ! 1154: itself, ! 1155: must be matched explicitly. ! 1156: In other instances of pattern matching the ! 1157: .B / ! 1158: and ! 1159: .B . ! 1160: are not treated specially. ! 1161: .PP ! 1162: .PD 0 ! 1163: .RS ! 1164: .TP ! 1165: .B \(** ! 1166: Matches any string, including the null string. ! 1167: .TP ! 1168: .B ? ! 1169: Matches any single character. ! 1170: .TP ! 1171: .BR \*(OK \^.\|.\|.\^ \*(CK ! 1172: Matches any one of the enclosed characters. ! 1173: A pair of characters separated by ! 1174: .B \- ! 1175: matches any ! 1176: character lexically between the pair, inclusive. ! 1177: If the first character following the opening "[ \|" ! 1178: is a "! \|" then any character not enclosed is matched. ! 1179: A ! 1180: .B \- ! 1181: can be included in the character set by putting it as the ! 1182: first or last character. ! 1183: .PD ! 1184: .RE ! 1185: .SS Quoting. ! 1186: Each of the ! 1187: .I metacharacters\^ ! 1188: listed above (See ! 1189: .I Definitions ! 1190: above). ! 1191: has a special meaning to the shell ! 1192: and cause termination of a word unless quoted. ! 1193: A character may be ! 1194: .I quoted\^ ! 1195: (i.e., made to stand for itself) ! 1196: by preceding ! 1197: it with a ! 1198: .BR \e . ! 1199: The pair ! 1200: .B \enew-line ! 1201: is ignored. ! 1202: All characters enclosed between a pair of single quote marks (\^\f3\(fm\^\(fm\fP\^), ! 1203: except a single quote, ! 1204: are quoted. ! 1205: Inside double quote marks ! 1206: (\f3"\^"\fP), ! 1207: parameter and command substitution occurs and ! 1208: .B \e ! 1209: quotes the characters ! 1210: .BR \e , ! 1211: .BR \(fm , ! 1212: \f3"\fP, ! 1213: and ! 1214: .BR $ . ! 1215: .B ! 1216: "$\(**" ! 1217: is equivalent to ! 1218: \f3"$1 \|$2\fP \|.\|.\|.\f3"\fP, ! 1219: whereas ! 1220: .B ! 1221: "$@" ! 1222: is equivalent to ! 1223: .B ! 1224: "$1"\| ! 1225: .B ! 1226: "$2"\| ! 1227: \&.\|.\|.\^. ! 1228: .PP ! 1229: The special meaning of keywords can be removed by quoting any ! 1230: character of the keyword. ! 1231: The recognition of special command names listed below cannot be altered ! 1232: by quoting them. ! 1233: .SS Arithmetic Evaluation. ! 1234: An ability to perform integer arithmetic ! 1235: is provided with the special command ! 1236: .BR let . ! 1237: Evaluations are performed using ! 1238: .I long\^ ! 1239: arithmetic. ! 1240: Constants are of the form ! 1241: \*(OK\f2base\f3#\^\f1\*(CK\f2n\^\fP ! 1242: where ! 1243: .I base\^ ! 1244: is a decimal number between two and thirty-six ! 1245: representing the arithmetic base ! 1246: and ! 1247: .I n\^ ! 1248: is a number in that base. ! 1249: If ! 1250: .I base\^ ! 1251: is omitted ! 1252: then base 10 is used. ! 1253: .PP ! 1254: An internal integer representation of a ! 1255: .I named parameter\^ ! 1256: can be specified with the ! 1257: .B \-i ! 1258: option of the ! 1259: .B typeset ! 1260: special command. ! 1261: When this attribute is selected ! 1262: the first assignment to the ! 1263: parameter determines the arithmetic base ! 1264: to be used when ! 1265: parameter substitution occurs. ! 1266: .PP ! 1267: Since many of the arithmetic operators require ! 1268: quoting, an alternative form of the ! 1269: .B let ! 1270: command is provided. ! 1271: For any command which begins with a ! 1272: .BR (( , ! 1273: all the characters until a matching ! 1274: .B )) ! 1275: are treated as a quoted expression. ! 1276: More precisely, ! 1277: .B (( ! 1278: \&.\|.\|. ! 1279: .B )) ! 1280: is equivalent to ! 1281: .B let\^ ! 1282: \f3"\fP \|.\|.\|.\f3"\fP. ! 1283: .SS Prompting. ! 1284: When used interactively, ! 1285: the shell prompts with the value of ! 1286: .SM ! 1287: .B PS1 ! 1288: before reading a command. ! 1289: If at any time a new-line is typed and further input is needed ! 1290: to complete a command, then the secondary prompt ! 1291: (i.e., the value of ! 1292: .BR \s-1PS2\s+1 ) ! 1293: is issued. ! 1294: .SS Input/Output. ! 1295: Before a command is executed, its input and output ! 1296: may be redirected using a special notation interpreted by the shell. ! 1297: The following may appear anywhere in a simple-command ! 1298: or may precede or follow a ! 1299: .I command\^ ! 1300: and are ! 1301: .I not\^ ! 1302: passed on to the invoked command. ! 1303: Command and parameter substitution occurs before ! 1304: .I word\^ ! 1305: or ! 1306: .I digit\^ ! 1307: is used except as noted below. ! 1308: File name generation ! 1309: occurs only if the pattern matches a single file ! 1310: and blank interpretation is not performed. ! 1311: .TP 14 ! 1312: .BI < word ! 1313: Use file ! 1314: .I word\^ ! 1315: as standard input (file descriptor 0). ! 1316: .TP ! 1317: .BI > word ! 1318: Use file ! 1319: .I word\^ ! 1320: as standard output (file descriptor 1). ! 1321: If the file does not exist then it is created; ! 1322: otherwise, it is truncated to zero length. ! 1323: .TP ! 1324: .BI >\[email protected]@> word ! 1325: Use file ! 1326: .I word\^ ! 1327: as standard output. ! 1328: If the file exists then output is appended to it (by first seeking to the end-of-file); ! 1329: otherwise, the file is created. ! 1330: .TP ! 1331: \f3<\[email protected]@<\fP\*(OK\f3\-\fP\*(CK\f2word\fP ! 1332: The shell input is read up to a line that is the same as ! 1333: .IR word , ! 1334: or to an end-of-file. ! 1335: No parameter substitution, command substitution or ! 1336: file name generation is performed on ! 1337: .IR word . ! 1338: The resulting document, ! 1339: called a ! 1340: .IR here-document , ! 1341: becomes ! 1342: the standard input. ! 1343: If any character of ! 1344: .I word\^ ! 1345: is quoted, then no interpretation ! 1346: is placed upon the characters of the document; ! 1347: otherwise, parameter and command substitution occurs, ! 1348: .B \enew-line ! 1349: is ignored, ! 1350: and ! 1351: .B \e ! 1352: must be used to quote the characters ! 1353: .BR \e , ! 1354: .BR $ , ! 1355: .BR \*` , ! 1356: and the first character of ! 1357: .IR word . ! 1358: If ! 1359: .B \- ! 1360: is appended to ! 1361: .BR <\[email protected]@< , ! 1362: then all leading tabs are stripped from ! 1363: .I word\^ ! 1364: and from the document. ! 1365: .TP ! 1366: .BI <& digit ! 1367: The standard input is duplicated from file descriptor ! 1368: .I digit ! 1369: (see ! 1370: .IR dup (2)). ! 1371: Similarly for the standard output using ! 1372: .BR >& ! 1373: .IR digit . ! 1374: .TP ! 1375: .B <&\- ! 1376: The standard input is closed. ! 1377: Similarly for the standard output using ! 1378: .BR >&\- . ! 1379: .PP ! 1380: If one of the above is preceded by a digit, ! 1381: then the ! 1382: file descriptor number referred to is that specified ! 1383: by the digit ! 1384: (instead of the default 0 or 1). ! 1385: For example: ! 1386: .RS ! 1387: .PP ! 1388: \&.\|.\|. \|2>&1 ! 1389: .RE ! 1390: .PP ! 1391: means file descriptor 2 is to be opened ! 1392: for writing as a duplicate ! 1393: of file descriptor 1. ! 1394: .PP ! 1395: The order in which redirections are specified is significant. ! 1396: The shell evaluates each redirection in terms of the ! 1397: .RI ( "file descriptor" ", " file ) ! 1398: association at the time of evaluation. ! 1399: For example: ! 1400: .RS ! 1401: .PP ! 1402: \&.\|.\|. \|1>\f2fname\^\fP 2>&1 ! 1403: .RE ! 1404: .PP ! 1405: first associates file descriptor 1 with file ! 1406: .IR fname\^ . ! 1407: It then associates file descriptor 2 with the file associated with file ! 1408: descriptor 1 (i.e. ! 1409: .IR fname\^ ). ! 1410: If the order of redirections were reversed, file descriptor 2 would be associated ! 1411: with the terminal (assuming file descriptor 1 had been) and then file descriptor ! 1412: 1 would be associated with file ! 1413: .IR fname\^ . ! 1414: .PP ! 1415: If a command is followed by ! 1416: .B & ! 1417: and job control is not active, ! 1418: then the default standard input ! 1419: for the command ! 1420: is the empty file ! 1421: .BR /dev/null . ! 1422: Otherwise, the environment for the execution of a command contains the ! 1423: file descriptors of the invoking shell as modified by ! 1424: input/output specifications. ! 1425: .SS Environment. ! 1426: The ! 1427: .I environment\^ ! 1428: (see ! 1429: .IR environ (7)) ! 1430: is a list of name-value pairs that is passed to ! 1431: an executed program in the same way as a normal argument list. ! 1432: The names must be ! 1433: .I identifiers\^ ! 1434: and the values are character strings. ! 1435: The shell interacts with the environment in several ways. ! 1436: On invocation, the shell scans the environment ! 1437: and creates a ! 1438: parameter ! 1439: for each name found, ! 1440: giving it the corresponding value and marking it ! 1441: .I export . ! 1442: Executed commands inherit the environment. ! 1443: If the user modifies the values of these ! 1444: parameters ! 1445: or creates new ones, ! 1446: using the ! 1447: .B export ! 1448: or ! 1449: .B typeset \-x ! 1450: commands they become part of the ! 1451: environment. ! 1452: The environment seen by any executed command is thus composed ! 1453: of any name-value pairs originally inherited by the shell, ! 1454: whose values may be modified by the current shell, ! 1455: plus any additions ! 1456: which must be noted in ! 1457: .B export ! 1458: or ! 1459: .B typeset \-x ! 1460: commands. ! 1461: .PP ! 1462: The environment for any ! 1463: .I simple-command\^ ! 1464: or function ! 1465: may be augmented by prefixing it with one or more parameter assignments. ! 1466: A parameter assignment argument is a word of the form ! 1467: .IR identifier=value . ! 1468: Thus: ! 1469: .RS ! 1470: .PP ! 1471: \s-1TERM\s+1=450 \|cmd \|args and ! 1472: .br ! 1473: (export \|\s-1TERM\s+1; \|\s-1TERM\s+1=450; \|cmd \|args) ! 1474: .RE ! 1475: .PP ! 1476: are equivalent (as far as the above execution of ! 1477: .I cmd\^ ! 1478: is concerned). ! 1479: .PP ! 1480: If the ! 1481: .B \-k ! 1482: flag is set, ! 1483: .I all\^ ! 1484: parameter assignment arguments are placed in the environment, ! 1485: even if they occur after the command name. ! 1486: The following ! 1487: first prints ! 1488: .B "a=b c" ! 1489: and then ! 1490: .BR c: ! 1491: .PP ! 1492: .RS ! 1493: .nf ! 1494: echo \|a=b \|c ! 1495: set \|\-k ! 1496: echo \|a=b \|c ! 1497: .fi ! 1498: .RE ! 1499: .SS Functions. ! 1500: .PP ! 1501: The ! 1502: .B function\^ ! 1503: keyword, described in the ! 1504: .I Commands ! 1505: section above, ! 1506: is used to define shell functions. ! 1507: Shell functions are read in and stored internally. ! 1508: Alias names are resolved when the function is read. ! 1509: Functions are executed like commands with the arguments ! 1510: passed as positional parameters. ! 1511: (See ! 1512: .I Execution ! 1513: below). ! 1514: .PP ! 1515: Functions execute in the same process as the caller and ! 1516: share all files, traps ( other than ! 1517: .SM ! 1518: .B EXIT ! 1519: and ! 1520: .SM ! 1521: .BR ERR ) ! 1522: and present working directory with the ! 1523: caller. ! 1524: A trap set on ! 1525: .SM ! 1526: .B EXIT ! 1527: inside a function ! 1528: is executed after the function completes. ! 1529: Ordinarily, ! 1530: variables are shared between the calling program ! 1531: and the function. ! 1532: However, ! 1533: the ! 1534: .B typeset ! 1535: special command used within a function ! 1536: defines local variables whose scope includes ! 1537: the current function and ! 1538: all functions it calls. ! 1539: .PP ! 1540: The special command ! 1541: .B return ! 1542: is used to return ! 1543: from function calls. ! 1544: Errors within functions return control to the caller. ! 1545: .PP ! 1546: Function identifiers ! 1547: can be listed with the ! 1548: .B \-f ! 1549: option of the ! 1550: .B typeset ! 1551: special command. ! 1552: The text of functions will also ! 1553: be listed. ! 1554: Function can be undefined with the ! 1555: .B \-f ! 1556: option of the ! 1557: .B unset ! 1558: special command. ! 1559: .PP ! 1560: Ordinarily, ! 1561: functions are unset when the shell executes a shell script. ! 1562: The ! 1563: .B \-xf ! 1564: option of the ! 1565: .B typeset ! 1566: command allows a function to be exported ! 1567: to scripts that are executed without a separate ! 1568: invocation of the shell. ! 1569: Functions that need to be defined across separate ! 1570: invocations of the shell should be placed in the ! 1571: .B ! 1572: .SM ! 1573: ENV ! 1574: file. ! 1575: .SS Jobs. ! 1576: .PP ! 1577: If the ! 1578: .B monitor ! 1579: option of the ! 1580: .B set ! 1581: command is turned on, ! 1582: an interactive shell associates a \fIjob\fR with each pipeline. It keeps ! 1583: a table of current jobs, printed by the ! 1584: .B jobs ! 1585: command, and assigns them small integer numbers. When ! 1586: a job is started asynchronously with ! 1587: .BR & , ! 1588: the shell prints a line which looks ! 1589: like: ! 1590: .PP ! 1591: .DT ! 1592: [1] 1234 ! 1593: .PP ! 1594: indicating that the job which was started asynchronously was job number ! 1595: 1 and had one (top-level) process, whose process id was 1234. ! 1596: .PP ! 1597: This paragraph and the next require features that are ! 1598: not in all versions of UNIX and may not apply. ! 1599: If you are running a job and wish to do something else you may hit the key ! 1600: \fB^Z\fR (control-Z) which sends a STOP signal to the current job. ! 1601: The shell will then normally indicate that the job has been `Stopped', ! 1602: and print another prompt. You can then manipulate the state of this job, ! 1603: putting it in the background with the ! 1604: .B bg ! 1605: command, or run some other ! 1606: commands and then eventually bring the job back into the foreground with ! 1607: the foreground command ! 1608: .BR fg . ! 1609: A \fB^Z\fR takes effect immediately and ! 1610: is like an interrupt in that pending output and unread input are discarded ! 1611: when it is typed. ! 1612: .PP ! 1613: A job being run in the background will stop if it tries to read ! 1614: from the terminal. Background jobs are normally allowed to produce output, ! 1615: but this can be disabled by giving the command ``stty tostop''. ! 1616: If you set this ! 1617: tty option, then background jobs will stop when they try to produce ! 1618: output like they do when they try to read input. ! 1619: .PP ! 1620: There are several ways to refer to jobs in the shell. The character ! 1621: .B % ! 1622: introduces a job name. If you wish to refer to job number 1, you can ! 1623: name it as ! 1624: .B %1 . ! 1625: Jobs can also be named by prefixes of the string typed in to ! 1626: .B kill ! 1627: or restart them. ! 1628: Thus, on systems that support job control, ! 1629: .RB ` fg ! 1630: .BR %ed ' ! 1631: would normally restart ! 1632: a suspended ! 1633: .IR ed (1) ! 1634: job, if there were a suspended job whose name began with ! 1635: the string `ed'. ! 1636: .PP ! 1637: The shell maintains a notion of the current and previous jobs. ! 1638: In output pertaining to jobs, the current job is marked with a ! 1639: .B + ! 1640: and the previous job with a ! 1641: .BR \- . ! 1642: The abbreviation ! 1643: .B %+ ! 1644: refers ! 1645: to the current job and ! 1646: .B %\- ! 1647: refers to the previous job. ! 1648: .B %% ! 1649: is also a synonym for the current job. ! 1650: .PP ! 1651: This shell learns immediately whenever a process changes state. ! 1652: It normally informs you whenever a job becomes blocked so that ! 1653: no further progress is possible, but only just before it prints ! 1654: a prompt. This is done so that it does not otherwise disturb your work. ! 1655: .PP ! 1656: When you try to leave the shell while jobs are running or stopped, you will ! 1657: be warned that `You have stopped(running) jobs.' You may use the ! 1658: .B jobs ! 1659: command to see what they are. If you do this or immediately try to ! 1660: exit again, the shell will not warn you a second time, and the stopped ! 1661: jobs will be terminated. ! 1662: .SS Signals. ! 1663: The \s-1INT\s+1 and \s-1QUIT\s+1 signals for an invoked ! 1664: command are ignored if the command is followed by ! 1665: .B & ! 1666: and job ! 1667: .B monitor ! 1668: option is not active. ! 1669: Otherwise, signals have the values ! 1670: inherited by the shell from its parent, ! 1671: with the exception of signal 11 ! 1672: (but see also ! 1673: the ! 1674: .B trap ! 1675: command below). ! 1676: .SS Execution. ! 1677: Each time a command is executed, the above substitutions ! 1678: are carried out. ! 1679: If the command name matches one ! 1680: of the ! 1681: .I "Special Commands\^" ! 1682: listed below, ! 1683: it is executed within the ! 1684: current shell process. ! 1685: Next, the command name is checked to see if ! 1686: it matches one of the user defined functions. ! 1687: If it does, ! 1688: the positional parameters are saved ! 1689: and then reset to the arguments of the ! 1690: .I function\^ ! 1691: call. ! 1692: When the ! 1693: .I function\^ ! 1694: completes or issues a ! 1695: .BR return , ! 1696: the positional parameter list is restored ! 1697: and any trap set on ! 1698: .SM ! 1699: .B EXIT ! 1700: within the function is executed. ! 1701: The value of a ! 1702: .I function\^ ! 1703: is the value of the last command executed. ! 1704: A function is also executed in the ! 1705: current shell process. ! 1706: If a command name is not a ! 1707: .I "special command\^" ! 1708: or a user defined ! 1709: .IR function , ! 1710: a process is created and ! 1711: an attempt is made to execute the command via ! 1712: .IR exec (2). ! 1713: .PP ! 1714: The shell parameter ! 1715: .B ! 1716: .SM PATH ! 1717: defines the search path for ! 1718: the directory containing the command. ! 1719: Alternative directory names are separated by ! 1720: a colon ! 1721: .RB ( : ). ! 1722: The default path is ! 1723: .B :/bin:/usr/bin ! 1724: (specifying the current directory, ! 1725: .BR /bin , ! 1726: and ! 1727: .BR /usr/bin , ! 1728: in that order). ! 1729: Note that the current directory ! 1730: is specified by a null path name, ! 1731: which can appear immediately after the ! 1732: equal sign, between colon delimiters, ! 1733: or at the end of the path list. ! 1734: If the command name contains a \f3/\fP then the search path ! 1735: is not used. ! 1736: Otherwise, each directory in the path is ! 1737: searched for an executable file. ! 1738: If the file has execute permission but is not a ! 1739: directory or an ! 1740: .B a.out ! 1741: file, ! 1742: it is assumed to be a file containing shell commands. ! 1743: A sub-shell is spawned to read it. ! 1744: All non-exported aliases, ! 1745: functions, ! 1746: and named parameters are removed in this case. ! 1747: A parenthesized command is also executed in ! 1748: a sub-shell. ! 1749: .SS Command Re-entry. ! 1750: The text of the last ! 1751: .B ! 1752: .SM ! 1753: HISTSIZE ! 1754: (default 128) ! 1755: commands entered from a terminal device ! 1756: is saved in a ! 1757: .I history ! 1758: file. ! 1759: The file ! 1760: .B \s-1$HOME\s+1/.history ! 1761: is used if the ! 1762: .B ! 1763: .SM ! 1764: HISTFILE ! 1765: variable is not set ! 1766: or is not writable. ! 1767: A shell can access the commands of ! 1768: all ! 1769: .I interactive ! 1770: shells which use the same named ! 1771: .SM ! 1772: .BR HISTFILE . ! 1773: The special command ! 1774: .B fc\^ ! 1775: is used to list or ! 1776: edit a portion this file. ! 1777: The portion of the file to be edited or listed can be selected by ! 1778: number or by giving the first character or ! 1779: characters of the command. ! 1780: A single command or range of commands can be specified. ! 1781: If you do not specify an editor program as ! 1782: an argument to ! 1783: .B fc\^ ! 1784: then the value of the parameter ! 1785: .SM ! 1786: .B FCEDIT ! 1787: is used. ! 1788: If ! 1789: .SM ! 1790: .B FCEDIT ! 1791: is not defined then ! 1792: .I /bin/ed ! 1793: is used. ! 1794: The edited command(s) is printed and re-executed upon ! 1795: leaving the editor. ! 1796: The editor name ! 1797: .B \- ! 1798: is used to skip the editing phase and ! 1799: to re-execute the command. ! 1800: In this case a substitution parameter of the form ! 1801: \f2old\fP\f3=\fP\f2new\fP ! 1802: can be used to modify the command before execution. ! 1803: For example, if ! 1804: .B r ! 1805: is aliased to ! 1806: .B \(fmfc \-e \-\(fm ! 1807: then typing ! 1808: `\f3r bad=good c\fP' ! 1809: will re-execute the most recent command which starts with the letter ! 1810: .BR c , ! 1811: replacing the string ! 1812: .B bad ! 1813: with the string ! 1814: .BR good . ! 1815: .SS In-line Editing Options ! 1816: Normally, each command line entered from a terminal device is simply ! 1817: typed followed by a new-line (`RETURN' or `LINE\ FEED'). ! 1818: If either the ! 1819: .IR emacs , ! 1820: .IR gmacs , ! 1821: or ! 1822: .I vi ! 1823: option is active, the user can edit the command line. ! 1824: To be in either of these edit modes ! 1825: .B set ! 1826: the corresponding ! 1827: option. ! 1828: An editing option is automatically selected each time the ! 1829: .SM ! 1830: .B VISUAL ! 1831: or ! 1832: .SM ! 1833: .B EDITOR ! 1834: variable is assigned a value ending in either of these ! 1835: option names. ! 1836: .PP ! 1837: The editing features require that the user's terminal ! 1838: accept `RETURN' as carriage return without line feed ! 1839: and that a space (`\ ' must overwrite the current character on ! 1840: the screen. ! 1841: ADM terminal users should set the "space\ -\ advance" ! 1842: switch to `space'. ! 1843: Hewlett-Packard series 2621 terminal users should set the straps to ! 1844: `bcGHxZ\ etX'. ! 1845: .PP ! 1846: The editing modes implement a concept where the user is looking through a ! 1847: window at the current line. ! 1848: The window width is the value of ! 1849: .SM ! 1850: .B COLUMNS ! 1851: if it is defined, otherwise 80. ! 1852: If the line is longer than the window width minus two, a mark is ! 1853: displayed at the end of the window to notify the user. ! 1854: As the cursor moves and reaches the window boundaries the window will be ! 1855: centered about the cursor. ! 1856: The mark is a ! 1857: .BR > " (" ! 1858: .BR < ", " ! 1859: .BR * ) ! 1860: if the line extends on the ! 1861: right (left, both) side(s) of the window. ! 1862: .SS Emacs Editing Mode ! 1863: This mode is entered by enabling either the ! 1864: .I emacs ! 1865: or ! 1866: .I gmacs ! 1867: option. ! 1868: The only difference between these two modes is the way ! 1869: they handle ! 1870: .BR ^T . ! 1871: To edit, the user ! 1872: moves the cursor to the point needing correction and ! 1873: then inserts or deletes characters or words as needed. ! 1874: All the editing commands are control characters or escape ! 1875: sequences. ! 1876: The notation for control characters is caret ( ! 1877: .B ^ ! 1878: ) followed ! 1879: by the character. ! 1880: For example, ! 1881: .B ^F ! 1882: is the notation for control ! 1883: .BR F . ! 1884: This is entered by depressing `f' while holding down the ! 1885: `CTRL' (control) key. ! 1886: The `SHIFT' key is ! 1887: .I not ! 1888: depressed. ! 1889: (The notation ! 1890: .B ^? ! 1891: indicates the DEL (delete) key.) ! 1892: .PP ! 1893: The notation for escape sequences is ! 1894: .B M- ! 1895: followed by a ! 1896: character. ! 1897: For example, ! 1898: .B M-f ! 1899: (pronounced Meta f) ! 1900: is entered by depressing ESC ! 1901: (ascii ! 1902: .B 033 ! 1903: ) ! 1904: followed by `f'. ! 1905: ( ! 1906: .B M-F ! 1907: would be the notation for ESC followed by `SHIFT' (capital) `F'.) ! 1908: .PP ! 1909: All edit commands ! 1910: operate from any place on the line ! 1911: (not just at the beginning). ! 1912: Neither the "RETURN" nor the "LINE FEED" key is ! 1913: entered after edit commands except when noted. ! 1914: .PP ! 1915: .PD 0 ! 1916: .TP 10 ! 1917: .BI ^F ! 1918: Move cursor forward (right) one character. ! 1919: .PP ! 1920: .TP 10 ! 1921: .BI M-f ! 1922: Move cursor forward one word. ! 1923: (The editor's idea of a word is a string of characters ! 1924: consisting of only letters, digits and underscores.) ! 1925: .PP ! 1926: .TP 10 ! 1927: .BI ^B ! 1928: Move cursor backward (left) one character. ! 1929: .PP ! 1930: .TP 10 ! 1931: .BI M-b ! 1932: Move cursor backward one word. ! 1933: .PP ! 1934: .TP 10 ! 1935: .BI ^A ! 1936: Move cursor to start of line. ! 1937: .PP ! 1938: .TP 10 ! 1939: .BI ^E ! 1940: Move cursor to end of line. ! 1941: .PP ! 1942: .TP 10 ! 1943: .BI ^] char ! 1944: Move cursor to character ! 1945: .I char ! 1946: on current line. ! 1947: .PP ! 1948: .TP 10 ! 1949: .BI ^X^X ! 1950: Interchange the cursor and mark. ! 1951: .PP ! 1952: .TP 10 ! 1953: .I erase ! 1954: (User defined erase character as defined ! 1955: by the stty command, usually ! 1956: .B ^H ! 1957: or ! 1958: .BR # .) ! 1959: Delete previous character. ! 1960: .PP ! 1961: .TP 10 ! 1962: .BI ^D ! 1963: Delete current character. ! 1964: .PP ! 1965: .TP 10 ! 1966: .BI M-d ! 1967: Delete current word. ! 1968: .PP ! 1969: .TP 10 ! 1970: .BI M-^H ! 1971: (Meta-backspace) Delete previous word. ! 1972: .PP ! 1973: .TP 10 ! 1974: .BI M-h ! 1975: Delete previous word. ! 1976: .PP ! 1977: .TP 10 ! 1978: .BI M-^? ! 1979: (Meta-DEL) Delete previous word (if your interrupt character is ! 1980: .B ^? ! 1981: (DEL, the default) then this command will not work). ! 1982: .PP ! 1983: .TP 10 ! 1984: .BI ^T ! 1985: Transpose current character with next character in ! 1986: .I emacs ! 1987: mode. ! 1988: Transpose two previous characters in ! 1989: .I gmacs ! 1990: mode. ! 1991: .PP ! 1992: .TP 10 ! 1993: .BI ^C ! 1994: Capitalize current character. ! 1995: .PP ! 1996: .TP 10 ! 1997: .BI M-C ! 1998: Capitalize current word. ! 1999: .PP ! 2000: .TP 10 ! 2001: .BI ^K ! 2002: Kill from the cursor to the end of the line. ! 2003: If given a parameter of zero then kill from ! 2004: the start of line to the cursor. ! 2005: .PP ! 2006: .TP 10 ! 2007: .BI ^W ! 2008: Kill from the cursor to the mark. ! 2009: .PP ! 2010: .TP 10 ! 2011: .BI M-p ! 2012: Push the region from the cursor to the mark on the stack. ! 2013: .PP ! 2014: .TP 10 ! 2015: .I kill ! 2016: (User defined kill character as defined ! 2017: by the stty command, usually ! 2018: .B ^G ! 2019: or ! 2020: .BR @ .) ! 2021: Kill the entire current line. ! 2022: If two ! 2023: .I kill ! 2024: characters are entered in succession, all ! 2025: kill characters from then on cause a line feed ! 2026: (useful when using paper terminals). ! 2027: .PP ! 2028: .TP 10 ! 2029: .BI ^Y ! 2030: Restore last item removed from line. (Yank item back to the line.) ! 2031: .PP ! 2032: .TP 10 ! 2033: .BI ^L ! 2034: Line feed and print current line. ! 2035: .PP ! 2036: .TP 10 ! 2037: .BI ^@ ! 2038: (Null character) Set mark. ! 2039: .PP ! 2040: .TP 10 ! 2041: .BI M- ! 2042: (Meta space) Set mark. ! 2043: .PP ! 2044: .TP 10 ! 2045: .BI ^J ! 2046: (New\ line) Execute the current line. ! 2047: .PP ! 2048: .TP 10 ! 2049: .BI ^M ! 2050: (Return) Execute the current line. ! 2051: .PP ! 2052: .TP 10 ! 2053: .I eof ! 2054: End-of-file character, ! 2055: normally ! 2056: .BR ^D , ! 2057: will terminate the shell ! 2058: if the current line is null. ! 2059: .PP ! 2060: .TP 10 ! 2061: .BI ^P ! 2062: Fetch previous command. ! 2063: Each time ! 2064: .B ^P ! 2065: is entered ! 2066: the previous command back in time is accessed. ! 2067: .PP ! 2068: .TP 10 ! 2069: .BI M-< ! 2070: Fetch the least recent (oldest) history line. ! 2071: .PP ! 2072: .TP 10 ! 2073: .BI M-> ! 2074: Fetch the most recent (youngest) history line. ! 2075: .PP ! 2076: .TP 10 ! 2077: .BI ^N ! 2078: Fetch next command. ! 2079: Each time ! 2080: .B ^N ! 2081: is entered ! 2082: the next command forward in time is accessed. ! 2083: .PP ! 2084: .TP 10 ! 2085: .BI ^R string ! 2086: Reverse search history for a previous command line containing ! 2087: .IR string . ! 2088: If a parameter of zero is given the search is forward. ! 2089: .I String ! 2090: is terminated by a "RETURN" or "NEW\ LINE". ! 2091: .PP ! 2092: .TP 10 ! 2093: .B ^O ! 2094: Operate \- Execute the current line and fetch ! 2095: the next line relative to current line from the ! 2096: history file. ! 2097: .PP ! 2098: .TP 10 ! 2099: .BI M- digits ! 2100: (Escape) Define numeric parameter, the digits ! 2101: are taken as a parameter to the next command. ! 2102: The commands that accept a parameter are ! 2103: .BR ^F , ! 2104: .BR ^B , ! 2105: .IR erase , ! 2106: .BR ^D , ! 2107: .BR ^K , ! 2108: .BR ^R , ! 2109: .B ^P ! 2110: and ! 2111: .BR ^N . ! 2112: .PP ! 2113: .TP 10 ! 2114: .BI M- letter ! 2115: Soft-key \- Your alias list is searched for an ! 2116: alias by the name ! 2117: .BI _ letter ! 2118: and if an alias of this name is defined, its ! 2119: value will be inserted on the line. ! 2120: The ! 2121: .I letter ! 2122: must not be one of the above meta-functions. ! 2123: .PP ! 2124: .TP 10 ! 2125: .B M-_ ! 2126: The last parameter of the previous command is inserted ! 2127: on the line. ! 2128: .PP ! 2129: .TP 10 ! 2130: .B M-. ! 2131: The last parameter of the previous command is inserted ! 2132: on the line. ! 2133: .PP ! 2134: .TP 10 ! 2135: .B M-* ! 2136: Attempt file name generation on the current word. ! 2137: .PP ! 2138: .TP 10 ! 2139: .BI ^U ! 2140: Multiply parameter of next command by 4. ! 2141: .PP ! 2142: .TP 10 ! 2143: .BI \e ! 2144: Escape next character. ! 2145: Editing characters, the user's erase, kill and ! 2146: interrupt (normally ! 2147: .B ^? ! 2148: ) ! 2149: characters ! 2150: may be entered ! 2151: in a command line or in a search string if preceded by a ! 2152: .BR \e . ! 2153: The ! 2154: .B \e ! 2155: removes the next character's ! 2156: editing features (if any). ! 2157: .PP ! 2158: .TP 10 ! 2159: .BI ^V ! 2160: Display version of the shell. ! 2161: .PD ! 2162: .SS Vi Editing Mode ! 2163: There are two typing modes. ! 2164: Initially, when you enter a command you are in the ! 2165: .I input\^ ! 2166: mode. ! 2167: To edit, the user enters ! 2168: .I control\^ ! 2169: mode by typing ESC ( ! 2170: .B 033 ! 2171: ) and ! 2172: moves the cursor to the point needing correction and ! 2173: then inserts or deletes characters or words as needed. ! 2174: Most control commands accept an optional repeat ! 2175: .I count ! 2176: prior to the command. ! 2177: .P ! 2178: When in vi mode on most systems, ! 2179: canonical processing is initially enabled and the ! 2180: command will be echoed again if the speed is 1200 baud or greater and it ! 2181: contains any control characters or less than one second has elapsed ! 2182: since the prompt was printed. ! 2183: The ESC character terminates canonical processing for the remainder of the command ! 2184: and the user can than modify the command line. ! 2185: This scheme has the advantages of canonical processing with the type-ahead ! 2186: echoing of raw mode. ! 2187: .P ! 2188: If the option ! 2189: .B viraw\^ ! 2190: is also set, the terminal will always have canonical processing ! 2191: disabled. This mode is implicit for systems that do not support two ! 2192: alternate end of line delimiters, ! 2193: and may be helpful for certain terminals. ! 2194: .SS "\ \ \ \ \ Input Edit Commands" ! 2195: .PP ! 2196: .RS ! 2197: By default the editor is in input mode. ! 2198: .PD 0 ! 2199: .TP 10 ! 2200: .I erase ! 2201: (User defined erase character as defined ! 2202: by the stty command, usually ! 2203: .B ^H ! 2204: or ! 2205: .BR # .) ! 2206: Delete previous character. ! 2207: .TP 10 ! 2208: .BI ^W ! 2209: Delete the previous blank separated word. ! 2210: .TP 10 ! 2211: .BI ^D ! 2212: Terminate the shell. ! 2213: .TP 10 ! 2214: .BI ^V ! 2215: Escape next character. ! 2216: Editing characters, the user's erase or kill ! 2217: characters may be entered ! 2218: in a command line or in a search string if preceded by a ! 2219: .BR ^V . ! 2220: The ! 2221: .B ^V ! 2222: removes the next character's ! 2223: editing features (if any). ! 2224: .TP 10 ! 2225: .BI \e ! 2226: Escape the next ! 2227: .I erase ! 2228: or ! 2229: .I kill ! 2230: character. ! 2231: .P ! 2232: .RE ! 2233: .SS "\ \ \ \ \ Motion Edit Commands" ! 2234: .RS ! 2235: These commands will move the cursor. ! 2236: .TP 10 ! 2237: [\f2count\fP]\f3l\fP ! 2238: Cursor forward (right) one character. ! 2239: .TP 10 ! 2240: [\f2count\fP]\f3w\fP ! 2241: Cursor forward one alpha-numeric word. ! 2242: .TP 10 ! 2243: [\f2count\fP]\f3W\fP ! 2244: Cursor to the beginning of the next word that follows a blank. ! 2245: .TP 10 ! 2246: [\f2count\fP]\f3e\fP ! 2247: Cursor to end of word. ! 2248: .TP 10 ! 2249: [\f2count\fP]\f3E\fP ! 2250: Cursor to end of the current blank delimited word. ! 2251: .TP 10 ! 2252: [\f2count\fP]\f3h\fP ! 2253: Cursor backward (left) one character. ! 2254: .TP 10 ! 2255: [\f2count\fP]\f3b\fP ! 2256: Cursor backward one word. ! 2257: .TP 10 ! 2258: [\f2count\fP]\f3B\fP ! 2259: Cursor to preceding blank separated word. ! 2260: .TP 10 ! 2261: [\f2count\fP]\f3f\fP\f2c\fP ! 2262: Find the next character \fIc\fP in the current line. ! 2263: .TP 10 ! 2264: [\f2count\fP]\f3F\fP\f2c\fP ! 2265: Find the previous character \fIc\fP in the current line. ! 2266: .TP 10 ! 2267: [\f2count\fP]\f3t\fP\f2c\fP ! 2268: Equivalent to ! 2269: .B f ! 2270: followed by ! 2271: .BR h . ! 2272: .TP 10 ! 2273: [\f2count\fP]\f3T\fP\f2c\fP ! 2274: Equivalent to ! 2275: .B F ! 2276: followed by ! 2277: .BR l . ! 2278: .TP 10 ! 2279: .B ; ! 2280: Repeats the last single character find command, ! 2281: .BR f , ! 2282: .BR F , ! 2283: .BR t , ! 2284: or ! 2285: .BR T . ! 2286: .TP 10 ! 2287: .B , ! 2288: Reverses the last single character find command. ! 2289: .TP 10 ! 2290: .B 0 ! 2291: Cursor to start of line. ! 2292: .TP 10 ! 2293: .B ^ ! 2294: Cursor to first non-blank character in line. ! 2295: .TP 10 ! 2296: .B $ ! 2297: Cursor to end of line. ! 2298: .RE ! 2299: .SS "\ \ \ \ \ Search Edit Commands" ! 2300: .RS ! 2301: These commands access your command history. ! 2302: .TP 10 ! 2303: [\f2count\fP]\f3k\fP ! 2304: Fetch previous command. ! 2305: Each time ! 2306: .B k ! 2307: is entered ! 2308: the previous command back in time is accessed. ! 2309: .TP 10 ! 2310: [\f2count\fP]\f3\-\fP ! 2311: Equivalent to ! 2312: .BR k . ! 2313: .TP 10 ! 2314: [\f2count\fP]\f3j\fP ! 2315: Fetch next command. ! 2316: Each time ! 2317: .B j ! 2318: is entered ! 2319: the next command forward in time is accessed. ! 2320: .TP 10 ! 2321: [\f2count\fP]\f3+\fP ! 2322: Equivalent to ! 2323: .BR j . ! 2324: .TP 10 ! 2325: [\f2count\fP]\f3G\fP ! 2326: The command number ! 2327: .I count ! 2328: is fetched. ! 2329: The default is the least recent history command. ! 2330: .TP 10 ! 2331: .BI / string ! 2332: Search backward through history for a previous command containing ! 2333: .IR string . ! 2334: .I String ! 2335: is terminated by a "RETURN" or "NEW\ LINE". ! 2336: If \fIstring\fP is null the previous string will be used. ! 2337: .TP 10 ! 2338: .BI ? string ! 2339: Same as ! 2340: .B / ! 2341: except that search will be in the forward direction. ! 2342: .TP 10 ! 2343: .B n ! 2344: Search for next match of the last pattern to ! 2345: .B / ! 2346: or ! 2347: .B ? ! 2348: commands. ! 2349: .TP 10 ! 2350: .B N ! 2351: Search for next match of the last pattern to ! 2352: .B / ! 2353: or ! 2354: .BR ? , ! 2355: but in reverse direction. ! 2356: Search history for the \fIstring\fP entered by the previous \fB/\fP command. ! 2357: .RE ! 2358: .SS "\ \ \ \ \ Text Modification Edit Commands" ! 2359: .RS ! 2360: These commands will modify the line. ! 2361: .TP 10 ! 2362: .B a ! 2363: Enter input mode and enter text after the current character. ! 2364: .TP 10 ! 2365: .B A ! 2366: Append text to the end of the line. Equivalent to ! 2367: .BR $a . ! 2368: .TP 10 ! 2369: [\f2count\fP]\f3c\fP\f2motion\fP ! 2370: .TP 10 ! 2371: \f3c\fP[\f2count\fP]\f2motion\fP ! 2372: Delete current character through the character ! 2373: .I motion ! 2374: moves the cursor to and enter input mode. ! 2375: If \fImotion\fP is ! 2376: .BR c , ! 2377: the entire line will be deleted and ! 2378: input mode entered. ! 2379: .TP 10 ! 2380: .B C ! 2381: Delete the current character through the end of line and enter input mode. ! 2382: Equivalent to ! 2383: .BR c$ . ! 2384: .TP 10 ! 2385: .B S ! 2386: Equivalent to ! 2387: .BR cc . ! 2388: .TP 10 ! 2389: .B D ! 2390: Delete the current character through the end of line. ! 2391: .TP 10 ! 2392: [\f2count\fP]\f3d\fP\f2motion\fP ! 2393: .TP 10 ! 2394: \f3d\fP[\f2count\fP]\f2motion\fP ! 2395: Delete current character through the character ! 2396: .I motion ! 2397: moves the cursor to. Equivalent to ! 2398: .BR d$ . ! 2399: If \fImotion\fP is ! 2400: .B d , ! 2401: the entire line will be deleted. ! 2402: .TP 10 ! 2403: .B i ! 2404: Enter input mode and insert text before the current character. ! 2405: .TP 10 ! 2406: .B I ! 2407: Insert text before the beginning of the line. Equivalent to ! 2408: the two character sequence ! 2409: .BR ^i . ! 2410: .TP 10 ! 2411: [\f2count\fP]\f3P\fP ! 2412: Place the previous text modification before the cursor. ! 2413: .TP 10 ! 2414: [\f2count\fP]\f3p\fP ! 2415: Place the previous text modification after the cursor. ! 2416: .TP 10 ! 2417: .B R ! 2418: Enter input mode and ! 2419: replace characters on the screen with characters you type overlay fashion. ! 2420: .TP 10 ! 2421: .BI r c ! 2422: Replace the current character with ! 2423: .IR c . ! 2424: .TP 10 ! 2425: [\f2count\fP]\f3x\fP ! 2426: Delete current character. ! 2427: .TP 10 ! 2428: [\f2count\fP]\f3X\fP ! 2429: Delete preceding character. ! 2430: .TP 10 ! 2431: [\f2count\fP]\f3.\fP ! 2432: Repeat the previous text modification command. ! 2433: .TP 10 ! 2434: .B \(ap ! 2435: Invert the case of the current character and advance the cursor. ! 2436: .TP 10 ! 2437: [\f2count\fP]\f3_\fP ! 2438: Causes the ! 2439: .I count\^ ! 2440: word of the previous command to be appended and ! 2441: input mode entered. ! 2442: The last word is used ! 2443: if ! 2444: .I count\^ ! 2445: is omitted. ! 2446: .TP 10 ! 2447: .B * ! 2448: Causes an ! 2449: .B * ! 2450: to be appended to the current word and file name generation attempted. ! 2451: If no match is found, ! 2452: it rings the bell. Otherwise, the word is replaced ! 2453: by the matching pattern and input mode is entered. ! 2454: .RE ! 2455: .SS "\ \ \ \ \ Other Edit Commands" ! 2456: .RS ! 2457: Miscellaneous commands. ! 2458: .TP 10 ! 2459: .B u ! 2460: Undo the last text modifying command. ! 2461: .TP 10 ! 2462: .B U ! 2463: Undo all the text modifying commands performed on the line. ! 2464: .TP 10 ! 2465: [\f2count\fP]\f3v\fP ! 2466: Returns the command ! 2467: .BI "fc \-e ${\s-1VISUAL\s+1:\-${\s-1EDITOR\s+1:\-vi}}" " count" ! 2468: in the input buffer. ! 2469: If ! 2470: .I count\^ ! 2471: is omitted, then the current line is used. ! 2472: .TP 10 ! 2473: .BI ^L ! 2474: Line feed and print current line. ! 2475: Has effect only in control mode. ! 2476: .TP 10 ! 2477: .BI ^J ! 2478: (New\ line) Execute the current line, regardless of mode. ! 2479: .TP 10 ! 2480: .BI ^M ! 2481: (Return) Execute the current line, regardless of mode. ! 2482: .TP 10 ! 2483: .B \# ! 2484: Equivalent to ! 2485: \f3I#\fP\f2<cr>\fP. ! 2486: Useful for causing the current line to be ! 2487: inserted in the history without being executed. ! 2488: .RE ! 2489: .PD ! 2490: .SS Special Commands. ! 2491: The following simple-commands are executed in the shell process. ! 2492: Input/Output redirection is permitted. ! 2493: File descriptor 1 is the default output location. ! 2494: Parameter assignment lists preceding the command do not ! 2495: remain in effect when the command completes unless noted. ! 2496: .TP ! 2497: \f3:\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK ! 2498: Parameter assignments remain in effect after the command completes. ! 2499: The command only expands parameters. ! 2500: A zero exit code is returned. ! 2501: .br ! 2502: .ne 2 ! 2503: .TP ! 2504: \f3\|. \f2file\^\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK ! 2505: Parameter assignments remain in effect after the command completes. ! 2506: Read and execute commands from ! 2507: .I file\^ ! 2508: and return. ! 2509: The commands are executed in the current Shell environment. ! 2510: The search path ! 2511: specified by ! 2512: .B ! 2513: .SM PATH ! 2514: is used to find the directory containing ! 2515: .IR file . ! 2516: If any arguments ! 2517: .I arg\^ ! 2518: are given, ! 2519: they become the positional parameters. ! 2520: Otherwise the positional parameters are unchanged. ! 2521: .TP ! 2522: \f3alias\fP \*(OK \f3\-tx\fP \*(CK \*(OK \f2name\fP\*(OK \f2=value\^\fP \*(CK .\|.\|. \*(CK ! 2523: .I Alias\^ ! 2524: with no arguments prints the list of aliases ! 2525: in the form ! 2526: .I name=value\^ ! 2527: on standard output. ! 2528: An ! 2529: .I alias\^ ! 2530: is defined ! 2531: for each name whose ! 2532: .I value\^ ! 2533: is given. ! 2534: A trailing space in ! 2535: .I value\^ ! 2536: causes the next word to be checked for ! 2537: alias substitution. ! 2538: The ! 2539: .B \-t ! 2540: flag is used to set and list tracked aliases. ! 2541: The value of a tracked alias is the full pathname ! 2542: corresponding to the given ! 2543: .IR name . ! 2544: The value becomes undefined when the value of ! 2545: .SM ! 2546: .B PATH ! 2547: is reset but the aliases remained tracked. ! 2548: Without the ! 2549: .B \-t ! 2550: flag, ! 2551: for each ! 2552: .I name\^ ! 2553: in the argument list ! 2554: for which no ! 2555: .I value\^ ! 2556: is given, the name ! 2557: and value of the alias is printed. ! 2558: The ! 2559: .B \-x ! 2560: flag is used to set or print exported aliases. ! 2561: An exported alias is defined across sub-shell environments. ! 2562: Alias returns true unless a ! 2563: .I name\^ ! 2564: is given for which no alias has been defined. ! 2565: .TP ! 2566: \f3bg\fP \*(OK \f3%\f2job\^\fP \*(CK ! 2567: This command is only built-in on systems that support job control. ! 2568: Puts the specified ! 2569: .I job\^ ! 2570: into the background. ! 2571: The current job is put in the background ! 2572: if ! 2573: .I job\^ ! 2574: is not specified. ! 2575: .TP ! 2576: \f3break\fP \*(OK \f2n\^\fP \*(CK ! 2577: Exit from the enclosing ! 2578: .BR for ! 2579: .BR while ! 2580: .BR until ! 2581: or ! 2582: .B select\^ ! 2583: loop, if any. ! 2584: If ! 2585: .I n\^ ! 2586: is specified then break ! 2587: .I n\^ ! 2588: levels. ! 2589: .TP ! 2590: \f3continue\fP \*(OK \f2n\^\fP \*(CK ! 2591: Resume the next iteration of the enclosing ! 2592: .BR for ! 2593: .BR while ! 2594: .BR until ! 2595: or ! 2596: .B select\^ ! 2597: loop. ! 2598: If ! 2599: .I n\^ ! 2600: is specified then resume at the ! 2601: .IR n -th ! 2602: enclosing loop. ! 2603: .TP ! 2604: .PD 0 ! 2605: \f3cd\fP \*(OK \f2arg\^\fP \*(CK ! 2606: .TP ! 2607: \f3cd\fP \f2old\^\fP \f2new\^\fP ! 2608: .PD ! 2609: This command can be in either of two forms. ! 2610: In the first form it ! 2611: changes the current directory to ! 2612: .IR arg . ! 2613: If ! 2614: .I arg\^ ! 2615: is ! 2616: .B \- ! 2617: the directory is changed to the previous ! 2618: directory. ! 2619: The shell ! 2620: parameter ! 2621: .B ! 2622: .SM HOME ! 2623: is the default ! 2624: .IR arg . ! 2625: The parameter ! 2626: .SM ! 2627: .B PWD ! 2628: is set to the current directory. ! 2629: The shell parameter ! 2630: .B ! 2631: .SM CDPATH ! 2632: defines the search path for ! 2633: the directory containing ! 2634: .IR arg . ! 2635: Alternative directory names are separated by ! 2636: a colon ! 2637: .RB ( : ). ! 2638: The default path is ! 2639: .B <null> ! 2640: (specifying the current directory). ! 2641: Note that the current directory is specified by a null path name, ! 2642: which can appear immediately after the equal sign ! 2643: or between the colon delimiters anywhere else in the path list. ! 2644: If ! 2645: .I arg ! 2646: begins with a \f3/\fP then the search path ! 2647: is not used. ! 2648: Otherwise, each directory in the path is ! 2649: searched for ! 2650: .IR arg . ! 2651: .P ! 2652: The second form of ! 2653: .B cd ! 2654: substitutes the string ! 2655: .I new ! 2656: for the string ! 2657: .I old ! 2658: in the current directory name, ! 2659: .SM ! 2660: .B PWD ! 2661: and tries to change to this new directory. ! 2662: .P ! 2663: The ! 2664: .B cd\^ ! 2665: command may not be executed by ! 2666: .I rsh\^. ! 2667: .TP ! 2668: \f3eval\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK ! 2669: The arguments are read as input ! 2670: to the shell ! 2671: and the resulting command(s) executed. ! 2672: .TP ! 2673: \f3exec\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK ! 2674: Parameter assignments remain in effect after the command completes. ! 2675: If ! 2676: .I arg\^ ! 2677: is given, ! 2678: the command specified by ! 2679: the arguments is executed in place of this shell ! 2680: without creating a new process. ! 2681: Input/output arguments may appear and ! 2682: affect the current process. ! 2683: If no ! 2684: arguments are given ! 2685: the effect of this command is to ! 2686: modify file descriptors ! 2687: as prescribed by the input/output redirection list. ! 2688: In this case, ! 2689: any file descriptor numbers greater than 2 that are ! 2690: opened with this mechanism are closed when invoking ! 2691: another program. ! 2692: .TP ! 2693: \f3exit\fP \*(OK \f2n\^\fP \*(CK ! 2694: Causes the shell to exit ! 2695: with the exit status specified by ! 2696: .IR n . ! 2697: If ! 2698: .I n\^ ! 2699: is omitted then the exit status is that of the last command executed. ! 2700: An end-of-file will also cause the shell to exit ! 2701: except for a ! 2702: shell which has the ! 2703: .I ignoreeof ! 2704: option (See ! 2705: .B set ! 2706: below) turned on. ! 2707: .TP ! 2708: \f3export\fP \*(OK \f2name\^\fP .\|.\|. \*(CK ! 2709: The given ! 2710: .IR name s ! 2711: are marked for automatic ! 2712: export to the ! 2713: .I environment\^ ! 2714: of subsequently-executed commands. ! 2715: .TP ! 2716: .PD 0 ! 2717: \f3fc\fP \*(OK \f3\-e \f2ename\^\fP \ \*(CK \*(OK \f3\-\f3nlr\^\f1 \*(CK \*(OK \f2first\^\fP \*(CK \*(OK \f2last\^\fP \*(CK ! 2718: .TP ! 2719: \f3fc \-e \-\fP \*(OK \f2old\fP\f3\=\fP\f2new\^\fP \*(CK \*(OK \f2command\^\fP \*(CK ! 2720: .PD ! 2721: In the first form, ! 2722: a range of commands from ! 2723: .I first\^ ! 2724: to ! 2725: .I last\^ ! 2726: is selected from the last ! 2727: .SM ! 2728: .B HISTSIZE ! 2729: commands that were typed at the terminal. ! 2730: The arguments ! 2731: .I first\^ ! 2732: and ! 2733: .I last\^ ! 2734: may be specified as a number or as a string. ! 2735: A string is used to locate the most recent command starting with ! 2736: the given string. ! 2737: A negative number is used as an offset to the current command number. ! 2738: If the flag ! 2739: .BR \-l , ! 2740: is selected, ! 2741: the commands are listed on standard output. ! 2742: Otherwise, the editor program ! 2743: .I ename\^ ! 2744: is invoked on a file containing these ! 2745: keyboard commands. ! 2746: If ! 2747: .I ename\^ ! 2748: is not supplied, then the value of the parameter ! 2749: .SM ! 2750: .B FCEDIT ! 2751: (default /bin/ed) ! 2752: is used as the editor. ! 2753: When editing is complete, the edited command(s) ! 2754: is executed. ! 2755: .I last\^ ! 2756: is not specified ! 2757: then it will be set to ! 2758: .IR first . ! 2759: If ! 2760: .I first\^ ! 2761: is not specified ! 2762: the default is the previous command ! 2763: for editing and \-16 for listing. ! 2764: The flag ! 2765: .B \-r ! 2766: reverses the order of the commands and ! 2767: the flag ! 2768: .B \-n ! 2769: suppresses command numbers when listing. ! 2770: In the second form the ! 2771: .I command\^ ! 2772: is re-executed after the substitution ! 2773: \f2old\^\fP\f3=\fP\f2new\^\fP ! 2774: is performed. ! 2775: .TP ! 2776: \f3fg\fP \*(OK \f3%\f2job\^\fP \*(CK ! 2777: This command is only built-in on systems that support job control. ! 2778: If ! 2779: .I job\^ ! 2780: is specified it brings it to the foreground. ! 2781: Otherwise, the current job is ! 2782: brought into the foreground. ! 2783: .TP ! 2784: \f3jobs\fP \*(OK \f3\-l\^\fP \*(CK ! 2785: Lists the active jobs; given the ! 2786: .B \-l ! 2787: options lists process id's in addition to the normal information. ! 2788: .TP ! 2789: \f3kill\fP \*(OK \f3\-\f2sig\^\fP \*(CK \f2process\^\fP .\|.\|. ! 2790: Sends either the TERM (terminate) signal or the ! 2791: specified signal to the specified jobs or processes. ! 2792: Signals are either given by number or by names (as given in ! 2793: .I /usr/include/signal.h, ! 2794: stripped of the prefix ``SIG''). ! 2795: The signal names are listed by ! 2796: .BR "kill \-l'" . ! 2797: There is no default, saying just `kill' does not ! 2798: send a signal to the current job. ! 2799: If the signal being sent is TERM (terminate) or HUP (hangup), ! 2800: then the job or process will be sent a CONT (continue) signal ! 2801: if it is stopped. ! 2802: The argument ! 2803: .I process\^ ! 2804: can be either a process id or a job. ! 2805: .TP ! 2806: \f3let\fP \f2arg\^\fP .\|.\|. ! 2807: Each ! 2808: .I arg ! 2809: is an ! 2810: .IR "arithmetic expression" ! 2811: to be evaluated. ! 2812: All calculations are done as long ! 2813: integers and no check for overflow ! 2814: is performed. ! 2815: Expressions consist of constants, ! 2816: named parameters, and operators. ! 2817: The following set of operators, ! 2818: listed in order of decreasing precedence, ! 2819: have been implemented: ! 2820: .RS ! 2821: .PD 0 ! 2822: .TP ! 2823: .B \- ! 2824: unary minus ! 2825: .TP ! 2826: .B ! ! 2827: logical negation ! 2828: .TP ! 2829: .B "* / %" ! 2830: .br ! 2831: multiplication, division, remainder ! 2832: .TP ! 2833: .B "+ \-" ! 2834: addition, subtraction ! 2835: .TP ! 2836: .B "<= >= < >" ! 2837: .br ! 2838: comparison ! 2839: .TP ! 2840: .B "== !=" ! 2841: .br ! 2842: equality inequality ! 2843: .TP ! 2844: .B = ! 2845: arithmetic replacement ! 2846: .PD ! 2847: .PP ! 2848: Sub-expressions in parentheses ! 2849: .B (\|) ! 2850: are evaluated first and can be used ! 2851: to override the above precedence rules. ! 2852: The evaluation within a precedence group ! 2853: is from right to left for the ! 2854: .B = ! 2855: operator ! 2856: and from left to right for the others. ! 2857: .PP ! 2858: A parameter name must be a valid ! 2859: .IR identifier . ! 2860: When a parameter is encountered, ! 2861: the value associated with the ! 2862: parameter name is substituted and expression evaluation resumes. ! 2863: Up to nine levels of recursion are ! 2864: permitted. ! 2865: .PP ! 2866: The return code is ! 2867: 0 if the value of the last expression ! 2868: is non-zero, and 1 otherwise. ! 2869: .RE ! 2870: .TP ! 2871: \f3newgrp\fP \*(OK \f2arg\^\fP .\|.\|. \*(CK ! 2872: Equivalent to ! 2873: .BI "exec newgrp" " arg\^" ! 2874: \&.\|.\|.\^. ! 2875: .TP ! 2876: \f3print\fP \*(OK \f3\-Rnprsu\^\fP\*(OK\f2n\fP \*(CK \*(CK \*(OK \f2arg\^\fP .\|.\|. \*(CK ! 2877: The shell output mechanism. ! 2878: With no flags or with flag ! 2879: .BR \- , ! 2880: the arguments are printed ! 2881: on standard output as described by ! 2882: .IR echo (1). ! 2883: In raw mode, ! 2884: .B \-R ! 2885: or ! 2886: .BR \-r , ! 2887: the escape conventions of ! 2888: .I echo ! 2889: are ignored. ! 2890: The ! 2891: .B \-R ! 2892: option will print all subsequent arguments and options ! 2893: other than ! 2894: .BR \-n . ! 2895: The ! 2896: .B \-p ! 2897: option causes the ! 2898: arguments to be written onto the pipe ! 2899: of the process spawned with ! 2900: .B \(bv& ! 2901: instead of standard output. ! 2902: The ! 2903: .B \-s ! 2904: option causes the ! 2905: arguments to be written onto the history file ! 2906: instead of standard output. ! 2907: The ! 2908: .B \-u ! 2909: flag can be used to specify a one digit ! 2910: file descriptor unit number ! 2911: .B n\^ ! 2912: on which the ! 2913: output will be placed. ! 2914: The default is 1. ! 2915: If the flag ! 2916: .B \-n ! 2917: is used, no ! 2918: .B new-line\^ ! 2919: is added to the output. ! 2920: .TP ! 2921: \f3read\fP \*(OK \f3\-prsu\^\fP\*(OK \f2n\^\fP \*(CK \*(CK \*(OK \f2name\f3?\f2prompt\^\f1 \*(CK \*(OK \f2name\^\fP .\|.\|. \*(CK ! 2922: The shell input mechanism. ! 2923: One line is read and ! 2924: is broken up into words using the characters in ! 2925: .B ! 2926: .SM IFS ! 2927: as separators. ! 2928: In raw mode, ! 2929: .B \-r, ! 2930: a ! 2931: .B \e ! 2932: at the end of a line does not signify ! 2933: line continuation. ! 2934: The first ! 2935: word is assigned to the first ! 2936: .IR name , ! 2937: the second word ! 2938: to the second ! 2939: .IR name , ! 2940: etc., with leftover words assigned to the last ! 2941: .IR name . ! 2942: The ! 2943: .B \-p ! 2944: option causes the input line ! 2945: to be taken from the input pipe ! 2946: of a process spawned by the shell ! 2947: using ! 2948: .BR \(bv& . ! 2949: If the ! 2950: .B \-s ! 2951: fag is present, ! 2952: the input will be saved as a command in the history file. ! 2953: The flag ! 2954: .B \-u ! 2955: can be used to specify a one digit file ! 2956: descriptor unit to read from. ! 2957: The file descriptor can be opened with the ! 2958: .B exec\^ ! 2959: special command. ! 2960: The default value of ! 2961: .I n\^ ! 2962: is 0. ! 2963: If ! 2964: .IR name ! 2965: is omitted then ! 2966: .SM ! 2967: .B REPLY ! 2968: is used as the default ! 2969: .IR name. ! 2970: The return code is 0 unless an end-of-file is encountered. ! 2971: An end-of-file with the ! 2972: .B \-p ! 2973: option causes cleanup for this process ! 2974: so that another can be spawned. ! 2975: If the first argument contains a ! 2976: .BR ? , ! 2977: the remainder of this word is used as a ! 2978: .I prompt\^ ! 2979: when the shell is interactive. ! 2980: If the given file descriptor is open for writing ! 2981: and is a terminal device then the prompt is placed ! 2982: on this unit. ! 2983: Otherwise the prompt is issued on file descriptor 2. ! 2984: The return code is 0 unless an end-of-file is encountered. ! 2985: .TP ! 2986: \f3readonly\fP \*(OK \f2name\fP .\|.\|. \*(CK ! 2987: The given ! 2988: .IR names ! 2989: are marked ! 2990: readonly and these ! 2991: names cannot be changed ! 2992: by subsequent assignment. ! 2993: .TP ! 2994: \f3return\fP \*(OK \f2n\^\fP \*(CK ! 2995: Causes a shell ! 2996: .I function ! 2997: to return ! 2998: to the invoking script ! 2999: with the return status specified by ! 3000: .IR n . ! 3001: If ! 3002: .I n\^ ! 3003: is omitted then the return status is that of the last command executed. ! 3004: If ! 3005: .B return ! 3006: is invoked while not in a ! 3007: .I function ! 3008: then it is the same as an ! 3009: .BR exit . ! 3010: .TP ! 3011: \f3set\fP \*(OK \f3\-aefhkmnostuvx\fP \*(CK \*(OK \f3\-o\fP \f2option\^\fP .\|.\|. \*(CK \*(OK \f2arg\^\fP .\|.\|. \*(CK ! 3012: The flags for this command have meaning as follows: ! 3013: .RS ! 3014: .PD 0 ! 3015: .TP 8 ! 3016: .B \-a ! 3017: All subsequent parameters that are defined are automatically exported. ! 3018: .TP 8 ! 3019: .B \-e ! 3020: If the shell is non-interactive and if a command fails, ! 3021: execute the ! 3022: .SM ! 3023: .B ERR ! 3024: trap, if set, ! 3025: and exit immediately. ! 3026: This mode is disabled while reading profiles. ! 3027: .TP 8 ! 3028: .B \-f ! 3029: Disables file name generation. ! 3030: .TP 8 ! 3031: .B \-h ! 3032: Each command whose name is an ! 3033: .I identifier\^ ! 3034: becomes a tracked alias when first encountered. ! 3035: .TP 8 ! 3036: .B \-k ! 3037: All parameter assignment arguments are placed in the environment for a command, ! 3038: not just those that precede the command name. ! 3039: .TP 8 ! 3040: .B \-m ! 3041: Background jobs will run in a separate process group ! 3042: and a line will print upon completion. ! 3043: The exit status of background jobs is reported in a completion message. ! 3044: On systems with job control, ! 3045: this flag is turned on automatically for ! 3046: interactive shells. ! 3047: .TP 8 ! 3048: .B \-n ! 3049: Read commands but do not execute them. ! 3050: .TP 8 ! 3051: .B \-o ! 3052: The following argument can be one of the following option names: ! 3053: .RS ! 3054: .TP 8 ! 3055: .B allexport ! 3056: Same as ! 3057: .BR \-a . ! 3058: .TP 8 ! 3059: .B errexit ! 3060: Same as ! 3061: .BR \-e . ! 3062: .TP 8 ! 3063: .B emacs ! 3064: Puts you in an ! 3065: .I emacs ! 3066: style in-line editor for command entry. ! 3067: .TP 8 ! 3068: .B gmacs ! 3069: Puts you in a ! 3070: .I gmacs ! 3071: style in-line editor for command entry. ! 3072: .TP 8 ! 3073: .B ignoreeof ! 3074: The shell will not exit on end-of-file. ! 3075: The command ! 3076: .B exit ! 3077: must be used. ! 3078: .TP 8 ! 3079: .B keyword ! 3080: Same as ! 3081: .BR \-k . ! 3082: .TP 8 ! 3083: .B markdirs ! 3084: All directory names resulting from file name generation have a trailing ! 3085: .B / ! 3086: appended. ! 3087: .TP 8 ! 3088: .B monitor ! 3089: Same as ! 3090: .BR \-m . ! 3091: .TP 8 ! 3092: .B noexec ! 3093: Same as ! 3094: .BR \-n . ! 3095: .TP 8 ! 3096: .B noglob ! 3097: Same as ! 3098: .BR \-f . ! 3099: .TP 8 ! 3100: .B nounset ! 3101: Same as ! 3102: .BR \-u . ! 3103: .TP 8 ! 3104: .B verbose ! 3105: Same as ! 3106: .BR \-v . ! 3107: .TP 8 ! 3108: .B trackall ! 3109: Same as ! 3110: .BR \-h . ! 3111: .TP 8 ! 3112: .B vi ! 3113: Puts you in insert mode of a ! 3114: .I vi\^ ! 3115: style in-line editor ! 3116: until you hit escape character ! 3117: .BR 033 . ! 3118: This puts you in move mode. ! 3119: A return sends the line. ! 3120: .TP 8 ! 3121: .B viraw ! 3122: Each character is processed as it is typed ! 3123: in ! 3124: .I vi\^ ! 3125: mode. ! 3126: .TP 8 ! 3127: .B xtrace ! 3128: Same as ! 3129: .BR \-x . ! 3130: .TP 8 ! 3131: ! 3132: If no option name is supplied then the current option settings are printed. ! 3133: .RE ! 3134: .TP 8 ! 3135: .B \-s ! 3136: Sort the positional parameters. ! 3137: .TP 8 ! 3138: .B \-t ! 3139: Exit after reading and executing one command. ! 3140: .TP 8 ! 3141: .B \-u ! 3142: Treat unset parameters as an error when substituting. ! 3143: .TP 8 ! 3144: .B \-v ! 3145: Print shell input lines as they are read. ! 3146: .TP 8 ! 3147: .B \-x ! 3148: Print commands and their arguments as they are executed. ! 3149: .TP 8 ! 3150: .B \- ! 3151: Turns off ! 3152: .B \-x ! 3153: and ! 3154: .B \-v ! 3155: flags and stops examining arguments for flags. ! 3156: .TP 8 ! 3157: .B \-\- ! 3158: Do not change any of the flags; useful in setting ! 3159: .B $1 ! 3160: to a value beginning with ! 3161: .BR \- . ! 3162: If no arguments follow this flag then the positional parameters are unset. ! 3163: .PD ! 3164: .PP ! 3165: Using ! 3166: .B \+ ! 3167: rather than ! 3168: .B \- ! 3169: causes these flags to be turned off. ! 3170: These flags can also be used upon invocation of the shell. ! 3171: The current set of flags may be found in ! 3172: .BR $\- . ! 3173: The remaining arguments are positional ! 3174: parameters and are assigned, in order, ! 3175: .if t to\p ! 3176: .if n to ! 3177: .BR $1 , ! 3178: .BR $2 , ! 3179: \&.\|.\|.\^. ! 3180: If no arguments are given then the values ! 3181: of all names are printed on the standard output. ! 3182: .RE ! 3183: .TP ! 3184: \f3shift\fP \*(OK \f2n\^\fP \*(CK ! 3185: .br ! 3186: The positional parameters from ! 3187: \f3$\fP\f2n\fP\f3+1\fP ! 3188: \&.\|.\|. ! 3189: are renamed ! 3190: .B $1 ! 3191: \&.\|.\|.\^ ! 3192: , default ! 3193: .I n\^ ! 3194: is 1. ! 3195: The parameter ! 3196: .I n\^ ! 3197: can be any arithmetic expression that evaluates to a non-negative ! 3198: number less than or equal to ! 3199: .BR $# . ! 3200: .TP ! 3201: \f3test\fP \*(OK \f2expr\^\fP \*(CK ! 3202: .br ! 3203: Evaluate conditional expression ! 3204: .IR expr . ! 3205: See ! 3206: .IR test (1) ! 3207: for usage and description. ! 3208: The arithmetic comparison operators ! 3209: are not restricted to integers. ! 3210: They allow any arithmetic expression. ! 3211: Four additional primitive expressions are allowed: ! 3212: .RS ! 3213: .PD 0 ! 3214: .TP ! 3215: \f3\-L\fP \f2file\^\fP ! 3216: True if ! 3217: .I file\^ ! 3218: is a symbolic link. ! 3219: .TP ! 3220: \f2file1\^\fP \f3\-nt\fP \f2file2\^\fP ! 3221: True if ! 3222: .I file1\^ ! 3223: is newer than ! 3224: .IR file2 . ! 3225: .TP ! 3226: \f2file1\^\fP \f3\-ot\fP \f2file2\^\fP ! 3227: True if ! 3228: .I file1\^ ! 3229: is older than ! 3230: .IR file2 . ! 3231: .TP ! 3232: \f2file1\^\fP \f3\-ef\fP \f2file2\^\fP ! 3233: True if ! 3234: .I file1\^ ! 3235: has the same device and i-node number as ! 3236: .IR file2 . ! 3237: .PD ! 3238: .RE ! 3239: .TP ! 3240: \f3times\fP ! 3241: .br ! 3242: Print the accumulated user and system times for ! 3243: the shell and for processes ! 3244: run from the shell. ! 3245: .TP ! 3246: \f3trap\fP \*(OK \f2arg\^\fP \*(CK \*(OK \f2sig\^\fP \*(CK .\|.\|. ! 3247: .I arg\^ ! 3248: is a command to be read and executed when the shell ! 3249: receives signal(s) ! 3250: .IR sig . ! 3251: (Note that ! 3252: .I arg\^ ! 3253: is scanned once when ! 3254: the trap is set and once when the trap ! 3255: is taken.) ! 3256: Each ! 3257: .I sig\^ ! 3258: can be given as a number or as the name of the signal. ! 3259: Trap commands are executed in order of signal number. ! 3260: Any attempt to set a trap on a signal that ! 3261: was ignored on entry to the current shell ! 3262: is ineffective. ! 3263: An attempt to trap on signal 11 (memory fault) produces an error. ! 3264: If ! 3265: .I arg\^ ! 3266: is omitted or is ! 3267: .BR \- , ! 3268: then all trap(s) ! 3269: .I sig\^ ! 3270: are reset ! 3271: to their original values. ! 3272: If ! 3273: .I arg\^ ! 3274: is the null ! 3275: string then this signal is ignored by the shell and by the commands ! 3276: it invokes. ! 3277: If ! 3278: .I sig\^ ! 3279: is ! 3280: .SM ! 3281: .B ERR ! 3282: then ! 3283: .I arg\^ ! 3284: will be executed whenever a command has a non-zero exit code. ! 3285: This trap is not inherited by functions. ! 3286: If ! 3287: .I sig\^ ! 3288: is ! 3289: .B 0 ! 3290: or ! 3291: .SM ! 3292: .B EXIT ! 3293: and the ! 3294: .B trap ! 3295: statement is executed inside the body of a function, ! 3296: then the command ! 3297: .I arg\^ ! 3298: is executed ! 3299: after the function completes. ! 3300: If ! 3301: .I sig\^ ! 3302: is ! 3303: .B 0 ! 3304: or ! 3305: .SM ! 3306: .B EXIT ! 3307: for a ! 3308: .B trap ! 3309: set outside any function ! 3310: then the command ! 3311: .I arg\^ ! 3312: is executed ! 3313: on exit from the shell. ! 3314: The ! 3315: .B trap ! 3316: command ! 3317: with no arguments prints a list ! 3318: of commands associated with each signal number. ! 3319: .TP ! 3320: \f3typeset\fP \*(OK \f3\-FLRZefilprtux\^\fP\*(OK\f2n\fP \*(CK \*(OK \f2name\fP\*(OK \f2=value\^\fP \*(CK \^ \*(CK .\|.\|. \*(CK ! 3321: Parameter assignments remain in effect after the command completes. ! 3322: When invoked inside a function, ! 3323: a new instance of the parameter ! 3324: .I name\^ ! 3325: is created. ! 3326: The parameter value and type are restored ! 3327: when the function completes. ! 3328: The following list of attributes may be specified: ! 3329: .RS ! 3330: .PD 0 ! 3331: .TP ! 3332: .B \-F ! 3333: This flag provides UNIX to host-name file mapping on non-UNIX ! 3334: machines. ! 3335: .TP ! 3336: .B \-L ! 3337: Left justify and remove leading blanks from ! 3338: .IR value . ! 3339: If ! 3340: .I n ! 3341: is non-zero it defines the width ! 3342: of the field, ! 3343: otherwise it is determined by the width of the value of ! 3344: first assignment. ! 3345: When the parameter is assigned to, it is ! 3346: filled on the right with blanks or truncated, if necessary, to ! 3347: fit into the field. ! 3348: Leading zeros are removed if the ! 3349: .B \-Z ! 3350: flag is also set. ! 3351: The ! 3352: .B \-R ! 3353: flag is turned off. ! 3354: .TP ! 3355: .B \-R ! 3356: Right justify and fill with leading blanks. ! 3357: If ! 3358: .I n ! 3359: is non-zero it defines the width ! 3360: of the field, ! 3361: otherwise it is determined by the width of the value of ! 3362: first assignment. ! 3363: The field is left filled with blanks or ! 3364: truncated from the end if the ! 3365: parameter is reassigned. ! 3366: The ! 3367: .B L ! 3368: flag is turned off. ! 3369: .TP ! 3370: .B \-Z ! 3371: Right justify and fill with leading zeros if ! 3372: the first non-blank character is a digit and the ! 3373: .B \-L ! 3374: flag has not been set. ! 3375: If ! 3376: .I n ! 3377: is non-zero it defines the width ! 3378: of the field, ! 3379: otherwise it is determined by the width of the value of ! 3380: first assignment. ! 3381: .TP ! 3382: .B \-e ! 3383: Tag the parameter as having an error. ! 3384: This tag is currently unused by the shell and can be ! 3385: set or cleared by the user. ! 3386: .TP ! 3387: .B \-f ! 3388: The names refer to function names rather than ! 3389: parameter names. ! 3390: No assignments can be made and the only other ! 3391: valid flag is ! 3392: .BR \-x . ! 3393: .TP ! 3394: .B \-i ! 3395: Parameter is an integer. ! 3396: This makes arithmetic faster. ! 3397: If ! 3398: .I n ! 3399: is non-zero it defines the output arithmetic base, ! 3400: otherwise the first assignment determines the output base. ! 3401: .TP ! 3402: .B \-l ! 3403: All upper-case characters ! 3404: converted to lower-case. ! 3405: The upper-case flag, ! 3406: .B \-u ! 3407: is turned off. ! 3408: .TP ! 3409: .B \-p ! 3410: The output of this command, if any, is written onto the two-way pipe ! 3411: .TP ! 3412: .B \-r ! 3413: The given ! 3414: .IR names ! 3415: are marked ! 3416: readonly and these ! 3417: names cannot be changed ! 3418: by subsequent assignment. ! 3419: .TP ! 3420: .B \-t ! 3421: Tags the named parameters. ! 3422: Tags are user definable and have no special ! 3423: meaning to the shell. ! 3424: .TP ! 3425: .B \-u ! 3426: All lower-case characters are converted ! 3427: to upper-case characters. ! 3428: The lower-case flag, ! 3429: .B \-l ! 3430: is turned off. ! 3431: .TP ! 3432: .B \-x ! 3433: The given ! 3434: .IR name s ! 3435: are marked for automatic ! 3436: export to the ! 3437: .I environment\^ ! 3438: of subsequently-executed commands. ! 3439: .PD ! 3440: .PP ! 3441: Using ! 3442: .B \+ ! 3443: rather than ! 3444: .B \- ! 3445: causes these flags to be turned off. ! 3446: If no ! 3447: .I name\^ ! 3448: arguments are given but flags are specified, ! 3449: a list of ! 3450: .I names\^ ! 3451: (and optionally the ! 3452: .I values\^ ! 3453: ) ! 3454: of the ! 3455: .I parameters\^ ! 3456: which have these ! 3457: flags set ! 3458: is printed. ! 3459: (Using ! 3460: .B \+ ! 3461: rather than ! 3462: .B \- ! 3463: keeps the ! 3464: values to be printed.) ! 3465: If no ! 3466: .IR name s ! 3467: and flags ! 3468: are given, ! 3469: the ! 3470: .I names\^ ! 3471: and ! 3472: .I attributes\^ ! 3473: of all ! 3474: .I parameters\^ ! 3475: are printed. ! 3476: .RE ! 3477: .TP ! 3478: \f3ulimit\fP \*(OK \f3\-cdfmpt\fP \*(CK \*(OK \f2n\^\fP \*(CK ! 3479: .RS ! 3480: .PD 0 ! 3481: .TP ! 3482: .B \-c ! 3483: imposes a size limit of ! 3484: .I n\^ ! 3485: blocks on the size of core dumps ! 3486: (\s-1BSD\s+1 only). ! 3487: .TP ! 3488: .B \-d ! 3489: imposes a size limit of ! 3490: .I n\^ ! 3491: blocks on the size of the data area ! 3492: (\s-1BSD\s+1 only). ! 3493: .TP ! 3494: .B \-f ! 3495: imposes a size limit of ! 3496: .I n\^ ! 3497: blocks on files written by child processes (files of any size may be read). ! 3498: .TP ! 3499: .B \-m ! 3500: imposes a soft limit of ! 3501: .I n\^ ! 3502: blocks on the size of physical memory ! 3503: (\s-1BSD\s+1 only). ! 3504: .TP ! 3505: .B \-p ! 3506: changes the pipe size to ! 3507: .I n\^ ! 3508: (\s-1UNIX\s+1/\s-1RT\s+1 only). ! 3509: .TP ! 3510: .B \-t ! 3511: imposes a time limit of ! 3512: .I n\^ ! 3513: seconds to be used by each process ! 3514: (\s-1BSD\s+1 only). ! 3515: .PD ! 3516: .PP ! 3517: If no option is given, ! 3518: .B \-f ! 3519: is assumed. ! 3520: If ! 3521: .I n\^ ! 3522: is not given the current limit is printed. ! 3523: .RE ! 3524: .TP ! 3525: \f3umask\fP \*(OK \f2nnn\^\fP \*(CK ! 3526: The user file-creation mask is set to ! 3527: .I nnn\^ ! 3528: (see ! 3529: .IR umask (2)). ! 3530: If ! 3531: .I nnn\^ ! 3532: is omitted, the current value of the mask is printed. ! 3533: .TP ! 3534: \f3unalias\fP \f2name\^\fP .\|.\|. ! 3535: The ! 3536: .IR ! 3537: parameters ! 3538: given by the list of ! 3539: .IR name s ! 3540: are removed from the ! 3541: .I alias\^ ! 3542: list. ! 3543: .TP ! 3544: \f3unset\fP \*(OK \f3\-f\fP \*(CK \f2name\^\fP .\|.\|. ! 3545: The parameters given by the list of ! 3546: .IR name s ! 3547: are unassigned, ! 3548: i. e., ! 3549: their values and attributes are erased. ! 3550: Readonly variables cannot be unset. ! 3551: If the flag, ! 3552: .BR \-f , ! 3553: is set, then the names refer to ! 3554: .I function\^ ! 3555: names. ! 3556: .TP ! 3557: \f3wait\fP \*(OK \f2n\^\fP \*(CK ! 3558: Wait for the specified process and ! 3559: report its termination status. ! 3560: If ! 3561: .I n\^ ! 3562: is not given then all currently active child processes are waited for. ! 3563: The return code from this command is that of ! 3564: the process waited for. ! 3565: .TP ! 3566: \f3whence\fP \*(OK \f3\-v\fP \*(CK \f2name\^\fP .\|.\|. ! 3567: For each ! 3568: .IR name , ! 3569: indicate how it ! 3570: would be interpreted if used as a command name. ! 3571: .P ! 3572: The flag, ! 3573: .BR \-v , ! 3574: produces a more verbose report. ! 3575: .SS Invocation. ! 3576: If the shell is invoked by ! 3577: .IR exec (2), ! 3578: and the first character of argument zero ! 3579: .RB ( $0 ) ! 3580: is ! 3581: .BR \- , ! 3582: then the shell is assumed to be a ! 3583: .I login ! 3584: shell and ! 3585: commands are read from ! 3586: .B /etc/profile ! 3587: and then from either ! 3588: .B .profile ! 3589: in the current directory or ! 3590: .BR \s-1$HOME\s+1/.profile , ! 3591: if either file exists. ! 3592: Next, commands are read from ! 3593: the file named by ! 3594: performing parameter substitution on ! 3595: the value of the environment parameter ! 3596: .SM ! 3597: .B ENV ! 3598: if the file exists. ! 3599: Commands are then read as described below; ! 3600: the following flags are interpreted by the shell ! 3601: when it is invoked: ! 3602: .PP ! 3603: .PD 0 ! 3604: .TP 10 ! 3605: .BI \-c "\| string\^" ! 3606: If the ! 3607: .B \-c ! 3608: flag is present then ! 3609: commands are read from ! 3610: .IR string . ! 3611: .TP ! 3612: .B \-s ! 3613: If the ! 3614: .B \-s ! 3615: flag is present or if no ! 3616: arguments remain ! 3617: then commands are read from the standard input. ! 3618: Shell output, ! 3619: except for the output of some of the ! 3620: .I Special commands\^ ! 3621: listed above, ! 3622: is written to ! 3623: file descriptor 2. ! 3624: .TP ! 3625: .B \-i ! 3626: If the ! 3627: .B \-i ! 3628: flag is present or ! 3629: if the shell input and output are attached to a terminal (as told by ! 3630: .IR gtty (2)) ! 3631: then this shell is ! 3632: .IR interactive . ! 3633: In this case \s-1TERMINATE\s+1 is ignored (so that \f3kill 0\fP ! 3634: does not kill an interactive shell) and \s-1INTERRUPT\s+1 is caught and ignored ! 3635: (so that ! 3636: .B wait ! 3637: is interruptible). ! 3638: In all cases, \s-1QUIT\s+1 is ignored by the shell. ! 3639: .TP ! 3640: .B \-r ! 3641: If the ! 3642: .B \-r ! 3643: flag is present the shell is a restricted shell. ! 3644: .PD ! 3645: .PP ! 3646: The remaining flags and arguments are described under the ! 3647: .B set ! 3648: command above. ! 3649: .SS Rsh Only. ! 3650: .I Rsh ! 3651: is used to set up login names and execution environments whose ! 3652: capabilities are more controlled than those of the standard shell. ! 3653: The actions of ! 3654: .I rsh\^ ! 3655: are identical to those of ! 3656: .IR sh , ! 3657: except that the following are disallowed: ! 3658: .RS ! 3659: .PD 0 ! 3660: .PP ! 3661: changing directory (see ! 3662: .IR cd (1)), ! 3663: .br ! 3664: setting the value of ! 3665: .SM ! 3666: .B SHELL ! 3667: or ! 3668: .SM ! 3669: .BR PATH\*S, ! 3670: .br ! 3671: specifying path or ! 3672: command names containing ! 3673: .BR / , ! 3674: .br ! 3675: redirecting output ! 3676: .RB ( > ! 3677: and ! 3678: .BR >> ). ! 3679: .PD ! 3680: .RE ! 3681: .PP ! 3682: The restrictions above are enforced ! 3683: after \f3.profile\fP and the ! 3684: .SM ! 3685: .B ENV ! 3686: files are interpreted. ! 3687: .PP ! 3688: When a command to be executed is found to be a shell procedure, ! 3689: .I rsh\^ ! 3690: invokes ! 3691: .I sh\^ ! 3692: to execute it. ! 3693: Thus, it is possible to provide to the end-user shell procedures ! 3694: that have access to the full power of ! 3695: the standard shell, ! 3696: while imposing a limited menu of commands; ! 3697: this scheme assumes that the end-user does not have write and ! 3698: execute permissions in the same directory. ! 3699: .PP ! 3700: The net effect of these rules is that the writer of the ! 3701: .B .profile ! 3702: has complete control over user actions, ! 3703: by performing guaranteed setup actions ! 3704: and leaving the user in an appropriate directory ! 3705: (probably ! 3706: .I not\^ ! 3707: the login directory). ! 3708: .PP ! 3709: The system administrator often sets up a directory ! 3710: of commands ! 3711: (i.e., ! 3712: .BR /usr/rbin ) ! 3713: that can be safely invoked by ! 3714: .IR rsh . ! 3715: Some systems also provide a restricted editor ! 3716: .IR red . ! 3717: .SH EXIT STATUS ! 3718: Errors detected by the shell, such as syntax errors, ! 3719: cause the shell ! 3720: to return a non-zero exit status. ! 3721: If the shell is being used non-interactively ! 3722: then execution of the shell file is abandoned. ! 3723: Otherwise, the shell returns the exit status of ! 3724: the last command executed (see also the ! 3725: .B exit ! 3726: command above). ! 3727: .SH FILES ! 3728: /etc/passwd ! 3729: .br ! 3730: /etc/profile ! 3731: .br ! 3732: \s-1$HOME\s+1/\f3.\fPprofile ! 3733: .br ! 3734: /tmp/sh\(** ! 3735: .br ! 3736: /dev/null ! 3737: .SH SEE ALSO ! 3738: cat(1), ! 3739: cd(1), ! 3740: echo(1), ! 3741: emacs(1), ! 3742: env(1), ! 3743: gmacs(1), ! 3744: newgrp(1), ! 3745: test(1), ! 3746: umask(1), ! 3747: vi(1), ! 3748: dup(2), ! 3749: exec(2), ! 3750: fork(2), ! 3751: gtty(2), ! 3752: pipe(2), ! 3753: signal(2), ! 3754: umask(2), ! 3755: ulimit(2), ! 3756: wait(2), ! 3757: rand(3), ! 3758: a.out(5), ! 3759: profile(5), ! 3760: environ(7). ! 3761: .SH CAVEATS ! 3762: .PP ! 3763: If a command which is a ! 3764: .I "tracked alias" ! 3765: is executed, and then a command with the same name is ! 3766: installed in a directory in the search path before the directory where the ! 3767: original command was found, the shell will continue to ! 3768: .I exec\^ ! 3769: the original command. ! 3770: Use the ! 3771: .B \-t ! 3772: option of the ! 3773: .B alias\^ ! 3774: command to correct this situation ! 3775: .PP ! 3776: If you move the current directory or one above it, ! 3777: .B pwd\^ ! 3778: may not give the correct response. ! 3779: Use the ! 3780: .B cd\^ ! 3781: command with a full path name ! 3782: to correct this situation. ! 3783: .PP ! 3784: Some very old shell scripts contain a ! 3785: .B ^ ! 3786: as a synonym for the pipe character ! 3787: .BR \(bv .
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.