|
|
1.1 ! root 1: .\" Copyright (c) 1980 Regents of the University of California. ! 2: .\" All rights reserved. The Berkeley software License Agreement ! 3: .\" specifies the terms and conditions for redistribution. ! 4: .\" ! 5: .\" @(#)csh.1 6.11 (Berkeley) 4/24/88 ! 6: .\" ! 7: .TH CSH 1 "April 24, 1988" ! 8: .UC 4 ! 9: .de sh ! 10: .br ! 11: .ne 5 ! 12: .PP ! 13: \fB\\$1\fR ! 14: .PP ! 15: .. ! 16: .if n .ds ua ^ ! 17: .if t .ds ua \(ua ! 18: .if n .ds aa ' ! 19: .if t .ds aa \(aa ! 20: .if n .ds ga ` ! 21: .if t .ds ga \(ga ! 22: .if t .tr *\(** ! 23: .SH NAME ! 24: csh \- a shell (command interpreter) with C-like syntax ! 25: .SH SYNOPSIS ! 26: .B csh ! 27: [ ! 28: .B \-cef\^instvVxX ! 29: ] [ ! 30: arg ... ! 31: ] ! 32: .SH DESCRIPTION ! 33: .I Csh ! 34: is a first implementation of a command language interpreter ! 35: incorporating a history mechanism (see \fBHistory Substitutions\fP), ! 36: job control facilities (see \fBJobs\fP), interactive file name ! 37: and user name completion (see \fBFile Name Completion\fP), ! 38: and a C-like syntax. ! 39: So as to be able to use its job control facilities, users of ! 40: .I csh ! 41: must (and automatically) use the new tty driver fully described in ! 42: .IR tty (4). ! 43: This new tty driver allows generation of interrupt characters ! 44: from the keyboard to tell jobs to stop. See ! 45: .IR stty (1) ! 46: for details on setting options in the new tty driver. ! 47: .PP ! 48: An instance of ! 49: .I csh ! 50: begins by executing commands from the file `.cshrc' in the ! 51: .I home ! 52: directory of the invoker. ! 53: If this is a login shell then it also executes commands from the file ! 54: `.login' there. ! 55: It is typical for users on crt's to put the command ``stty crt'' in their ! 56: .I \&.login ! 57: file, and to also invoke ! 58: .IR tset (1) ! 59: there. ! 60: .PP ! 61: In the normal case, the shell will then begin reading commands from the ! 62: terminal, prompting with `% '. ! 63: Processing of arguments and the use of the shell to process files ! 64: containing command scripts will be described later. ! 65: .PP ! 66: The shell then repeatedly performs the following actions: ! 67: a line of command input is read and broken into ! 68: .IR words . ! 69: This sequence of words is placed on the command history list and then parsed. ! 70: Finally each command in the current line is executed. ! 71: .PP ! 72: When a login shell terminates it executes commands from the file `.logout' ! 73: in the users home directory. ! 74: .sh "Lexical structure" ! 75: The shell splits input lines into words at blanks and tabs with the ! 76: following exceptions. ! 77: The characters ! 78: `&' `|' `;' `<' `>' `(' `)' ! 79: form separate words. ! 80: If doubled in `&&', `|\|\||', `<<' or `>>' these pairs form single words. ! 81: These parser metacharacters may be made part of other words, or prevented their ! 82: special meaning, by preceding them with `\e'. ! 83: A newline preceded by a `\e' is equivalent to a blank. ! 84: .PP ! 85: In addition strings enclosed in matched pairs of quotations, ! 86: `\*(aa', `\*(ga' or `"', ! 87: form parts of a word; metacharacters in these strings, including blanks ! 88: and tabs, do not form separate words. ! 89: These quotations have semantics to be described subsequently. ! 90: Within pairs of `\'' or `"' characters a newline preceded by a `\e' gives ! 91: a true newline character. ! 92: .PP ! 93: When the shell's input is not a terminal, ! 94: the character `#' introduces a comment which continues to the end of the ! 95: input line. ! 96: It is prevented this special meaning when preceded by `\e' ! 97: and in quotations using `\`', `\'', and `"'. ! 98: .sh "Commands" ! 99: A simple command is a sequence of words, the first of which ! 100: specifies the command to be executed. ! 101: A simple command or ! 102: a sequence of simple commands separated by `|' characters ! 103: forms a pipeline. ! 104: The output of each command in a pipeline is connected to the input of the next. ! 105: Sequences of pipelines may be separated by `;', and are then executed ! 106: sequentially. ! 107: A sequence of pipelines may be executed without immediately ! 108: waiting for it to terminate by following it with an `&'. ! 109: .PP ! 110: Any of the above may be placed in `(' `)' to form a simple command (which ! 111: may be a component of a pipeline, etc.) ! 112: It is also possible to separate pipelines with `|\|\||' or `&&' indicating, ! 113: as in the C language, ! 114: that the second is to be executed only if the first fails or succeeds ! 115: respectively. (See ! 116: .I Expressions.) ! 117: .sh "Jobs" ! 118: The shell associates a \fIjob\fR with each pipeline. It keeps ! 119: a table of current jobs, printed by the ! 120: \fIjobs\fR command, and assigns them small integer numbers. When ! 121: a job is started asynchronously with `&', the shell prints a line which looks ! 122: like: ! 123: .PP ! 124: .DT ! 125: [1] 1234 ! 126: .PP ! 127: indicating that the job which was started asynchronously was job number ! 128: 1 and had one (top-level) process, whose process id was 1234. ! 129: .PP ! 130: If you are running a job and wish to do something else you may hit the key ! 131: \fB^Z\fR (control-Z) which sends a STOP signal to the current job. ! 132: The shell will then normally indicate that the job has been `Stopped', ! 133: and print another prompt. You can then manipulate the state of this job, ! 134: putting it in the background with the \fIbg\fR command, or run some other ! 135: commands and then eventually bring the job back into the foreground with ! 136: the foreground command \fIfg\fR. A \fB^Z\fR takes effect immediately and ! 137: is like an interrupt in that pending output and unread input are discarded ! 138: when it is typed. There is another special key \fB^Y\fR which does ! 139: not generate a STOP signal until a program attempts to ! 140: .IR read (2) ! 141: it. ! 142: This can usefully be typed ahead when you have prepared some commands ! 143: for a job which you wish to stop after it has read them. ! 144: .PP ! 145: A job being run in the background will stop if it tries to read ! 146: from the terminal. Background jobs are normally allowed to produce output, ! 147: but this can be disabled by giving the command ``stty tostop''. ! 148: If you set this ! 149: tty option, then background jobs will stop when they try to produce ! 150: output like they do when they try to read input. ! 151: .PP ! 152: There are several ways to refer to jobs in the shell. The character ! 153: `%' introduces a job name. If you wish to refer to job number 1, you can ! 154: name it as `%1'. Just naming a job brings it to the foreground; thus ! 155: `%1' is a synonym for `fg %1', bringing job 1 back into the foreground. ! 156: Similarly saying `%1 &' resumes job 1 in the background. ! 157: Jobs can also be named by prefixes of the string typed in to start them, ! 158: if these prefixes are unambiguous, thus `%ex' would normally restart ! 159: a suspended ! 160: .IR ex (1) ! 161: job, if there were only one suspended job whose name began with ! 162: the string `ex'. It is also possible to say `%?string' ! 163: which specifies a job whose text contains ! 164: .I string, ! 165: if there is only one such job. ! 166: .PP ! 167: The shell maintains a notion of the current and previous jobs. ! 168: In output pertaining to jobs, the current job is marked with a `+' ! 169: and the previous job with a `\-'. The abbreviation `%+' refers ! 170: to the current job and `%\-' refers to the previous job. For close ! 171: analogy with the syntax of the ! 172: .I history ! 173: mechanism (described below), ! 174: `%%' is also a synonym for the current job. ! 175: .sh "Status reporting" ! 176: This shell learns immediately whenever a process changes state. ! 177: It normally informs you whenever a job becomes blocked so that ! 178: no further progress is possible, but only just before it prints ! 179: a prompt. This is done so that it does not otherwise disturb your work. ! 180: If, however, you set the shell variable ! 181: .I notify, ! 182: the shell will notify you immediately of changes of status in background ! 183: jobs. ! 184: There is also a shell command ! 185: .I notify ! 186: which marks a single process so that its status changes will be immediately ! 187: reported. By default ! 188: .I notify ! 189: marks the current process; ! 190: simply say `notify' after starting a background job to mark it. ! 191: .PP ! 192: When you try to leave the shell while jobs are stopped, you will ! 193: be warned that `You have stopped jobs.' You may use the \fIjobs\fR ! 194: command to see what they are. If you do this or immediately try to ! 195: exit again, the shell will not warn you a second time, and the suspended ! 196: jobs will be terminated. ! 197: .sh "File Name Completion" ! 198: When the file name completion feature is enabled by setting ! 199: the shell variable \fIfilec\fP (see \fBset\fP), \fIcsh\fP will ! 200: interactively complete file names and user names from unique ! 201: prefixes, when they are input from the terminal followed by ! 202: the escape character (the escape key, or control-[). For example, ! 203: if the current directory looks like ! 204: .ta 1i 2i 3i 4i 5i 6i ! 205: .nf ! 206: DSC.OLD bin cmd lib xmpl.c ! 207: DSC.NEW chaosnet cmtest mail xmpl.o ! 208: bench class dev mbox xmpl.out ! 209: .fi ! 210: and the input is ! 211: .br ! 212: % vi ch<escape> ! 213: .br ! 214: \fIcsh\fP will complete the prefix ``ch'' ! 215: to the only matching file name ``chaosnet'', changing the input ! 216: line to ! 217: .br ! 218: % vi chaosnet ! 219: .br ! 220: However, given ! 221: .br ! 222: % vi D<escape> ! 223: .br ! 224: \fIcsh\fP will only expand the input to ! 225: .br ! 226: % vi DSC. ! 227: .br ! 228: and will sound the terminal bell to indicate that the expansion is ! 229: incomplete, since there are two file names matching the prefix ``D''. ! 230: .PP ! 231: If a partial file name is followed by the end-of-file character ! 232: (usually control-D), then, instead of completing the name, \fIcsh\fP ! 233: will list all file names matching the prefix. For example, ! 234: the input ! 235: .br ! 236: % vi D<control-D> ! 237: .br ! 238: causes all files beginning with ``D'' to be listed: ! 239: .br ! 240: DSC.NEW DSC.OLD ! 241: .br ! 242: while the input line remains unchanged. ! 243: .PP ! 244: The same system of escape and end-of-file can also be used to ! 245: expand partial user names, if the word to be completed ! 246: (or listed) begins with the character ``~''. For example, ! 247: typing ! 248: .br ! 249: cd ~ro<escape> ! 250: .br ! 251: may produce the expansion ! 252: .br ! 253: cd ~root ! 254: .PP ! 255: The use of the terminal bell to signal errors or multiple matches ! 256: can be inhibited by setting the variable \fInobeep\fP. ! 257: .PP ! 258: Normally, all files in the particular directory are candidates ! 259: for name completion. Files with certain suffixes can be excluded ! 260: from consideration by setting the variable \fIfignore\fP to the ! 261: list of suffixes to be ignored. Thus, if \fIfignore\fP is set by ! 262: the command ! 263: .br ! 264: % set fignore = (.o .out) ! 265: .br ! 266: then typing ! 267: .br ! 268: % vi x<escape> ! 269: .br ! 270: would result in the completion to ! 271: .br ! 272: % vi xmpl.c ! 273: .br ! 274: ignoring the files "xmpl.o" and "xmpl.out". ! 275: However, if the only completion possible requires not ignoring these ! 276: suffixes, then they are not ignored. In addition, \fIfignore\fP ! 277: does not affect the listing of file names by control-D. All files ! 278: are listed regardless of their suffixes. ! 279: .sh Substitutions ! 280: We now describe the various transformations the shell performs on the ! 281: input in the order in which they occur. ! 282: .sh "History substitutions" ! 283: History substitutions place words from previous command input as portions ! 284: of new commands, making it easy to repeat commands, repeat arguments ! 285: of a previous command in the current command, or fix spelling mistakes ! 286: in the previous command with little typing and a high degree of confidence. ! 287: History substitutions begin with the character `!' and may begin ! 288: .B anywhere ! 289: in the input stream (with the proviso that they ! 290: .B "do not" ! 291: nest.) ! 292: This `!' may be preceded by an `\e' to prevent its special meaning; for ! 293: convenience, a `!' is passed unchanged when it is followed by a blank, ! 294: tab, newline, `=' or `('. ! 295: (History substitutions also occur when an input line begins with `\*(ua'. ! 296: This special abbreviation will be described later.) ! 297: Any input line which contains history substitution is echoed on the terminal ! 298: before it is executed as it could have been typed without history substitution. ! 299: .PP ! 300: Commands input from the terminal which consist of one or more words ! 301: are saved on the history list. ! 302: The history substitutions reintroduce sequences of words from these ! 303: saved commands into the input stream. ! 304: The size of which is controlled by the ! 305: .I history ! 306: variable; the previous command is always retained, regardless of its value. ! 307: Commands are numbered sequentially from 1. ! 308: .PP ! 309: For definiteness, consider the following output from the ! 310: .I history ! 311: command: ! 312: .PP ! 313: .DT ! 314: .br ! 315: \09 write michael ! 316: .br ! 317: 10 ex write.c ! 318: .br ! 319: 11 cat oldwrite.c ! 320: .br ! 321: 12 diff *write.c ! 322: .PP ! 323: The commands are shown with their event numbers. ! 324: It is not usually necessary to use event numbers, but the current event ! 325: number can be made part of the ! 326: .I prompt ! 327: by placing an `!' in the prompt string. ! 328: .PP ! 329: With the current event 13 we can refer to previous events by event ! 330: number `!11', relatively as in `!\-2' (referring to the same event), ! 331: by a prefix of a command word ! 332: as in `!d' for event 12 or `!wri' for event 9, or by a string contained in ! 333: a word in the command as in `!?mic?' also referring to event 9. ! 334: These forms, without further modification, simply reintroduce the words ! 335: of the specified events, each separated by a single blank. ! 336: As a special case `!!' refers to the previous command; thus `!!' ! 337: alone is essentially a ! 338: .I redo. ! 339: .PP ! 340: To select words from an event we can follow the event specification by ! 341: a `:' and a designator for the desired words. ! 342: The words of an input line are numbered from 0, ! 343: the first (usually command) word being 0, the second word (first argument) ! 344: being 1, etc. ! 345: The basic word designators are: ! 346: .PP ! 347: .DT ! 348: .nf ! 349: 0 first (command) word ! 350: \fIn\fR \fIn\fR\|'th argument ! 351: \*(ua first argument, i.e. `1' ! 352: $ last argument ! 353: % word matched by (immediately preceding) ?\fIs\fR\|? search ! 354: \fIx\fR\|\-\fIy\fR range of words ! 355: \-\fIy\fR abbreviates `0\-\fIy\fR\|' ! 356: * abbreviates `\*(ua\-$', or nothing if only 1 word in event ! 357: \fIx\fR\|* abbreviates `\fIx\fR\|\-$' ! 358: \fIx\fR\|\- like `\fIx\fR\|*' but omitting word `$' ! 359: .fi ! 360: .PP ! 361: The `:' separating the event specification from the word designator ! 362: can be omitted if the argument selector begins with a `\*(ua', `$', `*' ! 363: `\-' or `%'. ! 364: After the optional word designator can be ! 365: placed a sequence of modifiers, each preceded by a `:'. ! 366: The following modifiers are defined: ! 367: .ta .5i 1.2i ! 368: .PP ! 369: .nf ! 370: h Remove a trailing pathname component, leaving the head. ! 371: r Remove a trailing `.xxx' component, leaving the root name. ! 372: e Remove all but the extension `.xxx' part. ! 373: s/\fIl\fR\|/\fIr\fR\|/ Substitute \fIl\fR for \fIr\fR ! 374: t Remove all leading pathname components, leaving the tail. ! 375: & Repeat the previous substitution. ! 376: g Apply the change globally, prefixing the above, e.g. `g&'. ! 377: p Print the new command line but do not execute it. ! 378: q Quote the substituted words, preventing further substitutions. ! 379: x Like q, but break into words at blanks, tabs and newlines. ! 380: .fi ! 381: .PP ! 382: Unless preceded by a `g' the modification is applied only to the first ! 383: modifiable word. With substitutions, it is an error for no word to be ! 384: applicable. ! 385: .PP ! 386: The left hand side of substitutions are not regular expressions in the sense ! 387: of the editors, but rather strings. ! 388: Any character may be used as the delimiter in place of `/'; ! 389: a `\e' quotes the delimiter into the ! 390: .IR l "" ! 391: and ! 392: .IR r "" ! 393: strings. ! 394: The character `&' in the right hand side is replaced by the text from ! 395: the left. ! 396: A `\e' quotes `&' also. ! 397: A null ! 398: .IR l "" ! 399: uses the previous string either from a ! 400: .IR l "" ! 401: or from a ! 402: contextual scan string ! 403: .IR s "" ! 404: in `!?\fIs\fR\|?'. ! 405: The trailing delimiter in the substitution may be omitted if a newline ! 406: follows immediately as may the trailing `?' in a contextual scan. ! 407: .PP ! 408: A history reference may be given without an event specification, e.g. `!$'. ! 409: In this case the reference is to the previous command unless a previous ! 410: history reference occurred on the same line in which case this form repeats ! 411: the previous reference. ! 412: Thus `!?foo?\*(ua !$' gives the first and last arguments ! 413: from the command matching `?foo?'. ! 414: .PP ! 415: A special abbreviation of a history reference occurs when the first ! 416: non-blank character of an input line is a `\*(ua'. ! 417: This is equivalent to `!:s\*(ua' providing a convenient shorthand for substitutions ! 418: on the text of the previous line. ! 419: Thus `\*(ualb\*(ualib' fixes the spelling of ! 420: `lib' ! 421: in the previous command. ! 422: Finally, a history substitution may be surrounded with `{' and `}' ! 423: if necessary to insulate it from the characters which follow. ! 424: Thus, after `ls \-ld ~paul' we might do `!{l}a' to do `ls \-ld ~paula', ! 425: while `!la' would look for a command starting `la'. ! 426: .PP ! 427: .if n .ul ! 428: \fBQuotations\ with\ \'\ and\ "\fR ! 429: .PP ! 430: The quotation of strings by `\'' and `"' can be used ! 431: to prevent all or some of the remaining substitutions. ! 432: Strings enclosed in `\'' are prevented any further interpretation. ! 433: Strings enclosed in `"' may be expanded as described below. ! 434: .PP ! 435: In both cases the resulting text becomes (all or part of) a single word; ! 436: only in one special case (see ! 437: .I "Command Substitition" ! 438: below) does a `"' quoted string yield parts of more than one word; ! 439: `\'' quoted strings never do. ! 440: .sh "Alias substitution" ! 441: The shell maintains a list of aliases which can be established, displayed ! 442: and modified by the ! 443: .I alias ! 444: and ! 445: .I unalias ! 446: commands. ! 447: After a command line is scanned, it is parsed into distinct commands and ! 448: the first word of each command, left-to-right, is checked to see if it ! 449: has an alias. ! 450: If it does, then the text which is the alias for that command is reread ! 451: with the history mechanism available ! 452: as though that command were the previous input line. ! 453: The resulting words replace the ! 454: command and argument list. ! 455: If no reference is made to the history list, then the argument list is ! 456: left unchanged. ! 457: .PP ! 458: Thus if the alias for `ls' is `ls \-l' the command `ls /usr' would map to ! 459: `ls \-l /usr', the argument list here being undisturbed. ! 460: Similarly if the alias for `lookup' was `grep !\*(ua /etc/passwd' then ! 461: `lookup bill' would map to `grep bill /etc/passwd'. ! 462: .PP ! 463: If an alias is found, the word transformation of the input text ! 464: is performed and the aliasing process begins again on the reformed input line. ! 465: Looping is prevented if the first word of the new text is the same as the old ! 466: by flagging it to prevent further aliasing. ! 467: Other loops are detected and cause an error. ! 468: .PP ! 469: Note that the mechanism allows aliases to introduce parser metasyntax. ! 470: Thus we can `alias print \'pr \e!* \||\| lpr\'' to make a command which ! 471: .I pr's ! 472: its arguments to the line printer. ! 473: .sh "Variable substitution" ! 474: The shell maintains a set of variables, each of which has as value a list ! 475: of zero or more words. ! 476: Some of these variables are set by the shell or referred to by it. ! 477: For instance, the ! 478: .I argv ! 479: variable is an image of the shell's argument list, and words of this ! 480: variable's value are referred to in special ways. ! 481: .PP ! 482: The values of variables may be displayed and changed by using the ! 483: .I set ! 484: and ! 485: .I unset ! 486: commands. ! 487: Of the variables referred to by the shell a number are toggles; ! 488: the shell does not care what their value is, ! 489: only whether they are set or not. ! 490: For instance, the ! 491: .I verbose ! 492: variable is a toggle which causes command input to be echoed. ! 493: The setting of this variable results from the ! 494: .B \-v ! 495: command line option. ! 496: .PP ! 497: Other operations treat variables numerically. ! 498: The `@' command permits numeric calculations to be performed and the result ! 499: assigned to a variable. ! 500: Variable values are, however, always represented as (zero or more) strings. ! 501: For the purposes of numeric operations, the null string is considered to be ! 502: zero, and the second and subsequent words of multiword values are ignored. ! 503: .PP ! 504: After the input line is aliased and parsed, and before each command ! 505: is executed, variable substitution ! 506: is performed keyed by `$' characters. ! 507: This expansion can be prevented by preceding the `$' with a `\e' except ! 508: within `"'s where it ! 509: .B always ! 510: occurs, and within `\''s where it ! 511: .B never ! 512: occurs. ! 513: Strings quoted by `\*(ga' are interpreted later (see ! 514: .I "Command substitution" ! 515: below) so `$' substitution does not occur there until later, if at all. ! 516: A `$' is passed unchanged if followed by a blank, tab, or end-of-line. ! 517: .PP ! 518: Input/output redirections are recognized before variable expansion, ! 519: and are variable expanded separately. ! 520: Otherwise, the command name and entire argument list are expanded together. ! 521: It is thus possible for the first (command) word to this point to generate ! 522: more than one word, the first of which becomes the command name, ! 523: and the rest of which become arguments. ! 524: .PP ! 525: Unless enclosed in `"' or given the `:q' modifier the results of variable ! 526: substitution may eventually be command and filename substituted. ! 527: Within `"', a variable whose value consists of multiple words expands to a ! 528: (portion of) a single word, with the words of the variables value ! 529: separated by blanks. ! 530: When the `:q' modifier is applied to a substitution ! 531: the variable will expand to multiple words with each word separated ! 532: by a blank and quoted to prevent later command or filename substitution. ! 533: .PP ! 534: The following metasequences are provided for introducing variable values into ! 535: the shell input. ! 536: Except as noted, it is an error to reference a variable which is not set. ! 537: .HP 5 ! 538: $name ! 539: .br ! 540: .ns ! 541: .HP 5 ! 542: ${name} ! 543: .br ! 544: Are replaced by the words of the value of variable ! 545: .I name, ! 546: each separated by a blank. ! 547: Braces insulate ! 548: .I name ! 549: from following characters which would otherwise be part of it. ! 550: Shell variables have names consisting of up to 20 letters and digits ! 551: starting with a letter. The underscore character is considered a letter. ! 552: .br ! 553: If ! 554: .I name ! 555: is not a shell variable, but is set in the environment, then ! 556: that value is returned (but \fB:\fR modifiers and the other forms ! 557: given below are not available in this case). ! 558: .HP 5 ! 559: $name[selector] ! 560: .br ! 561: .ns ! 562: .HP 5 ! 563: ${name[selector]} ! 564: .br ! 565: May be used to select only some of the words from the value of ! 566: .I name. ! 567: The selector is subjected to `$' substitution and may consist of a single ! 568: number or two numbers separated by a `\-'. ! 569: The first word of a variables value is numbered `1'. ! 570: If the first number of a range is omitted it defaults to `1'. ! 571: If the last member of a range is omitted it defaults to `$#name'. ! 572: The selector `*' selects all words. ! 573: It is not an error for a range to be empty if the second argument is omitted ! 574: or in range. ! 575: .HP 5 ! 576: $#name ! 577: .br ! 578: .ns ! 579: .HP 5 ! 580: ${#name} ! 581: .br ! 582: Gives the number of words in the variable. ! 583: This is useful for later use in a `[selector]'. ! 584: .HP 5 ! 585: $0 ! 586: .br ! 587: Substitutes the name of the file from which command input is being read. ! 588: An error occurs if the name is not known. ! 589: .HP 5 ! 590: $number ! 591: .br ! 592: .ns ! 593: .HP 5 ! 594: ${number} ! 595: .br ! 596: Equivalent to `$argv[number]'. ! 597: .HP 5 ! 598: $* ! 599: .br ! 600: Equivalent to `$argv[*]'. ! 601: .PP ! 602: The modifiers `:e', `:h', `:t', `:r', `:q' and `:x' may be applied to ! 603: the substitutions above as may `:gh', `:gt' and `:gr'. ! 604: If braces `{' '}' appear in the command form then the modifiers ! 605: must appear within the braces. ! 606: .B "The current implementation allows only one `:' modifier on each `$' expansion." ! 607: .PP ! 608: The following substitutions may not be modified with `:' modifiers. ! 609: .HP 5 ! 610: $?name ! 611: .br ! 612: .ns ! 613: .HP 5 ! 614: ${?name} ! 615: .br ! 616: Substitutes the string `1' if name is set, `0' if it is not. ! 617: .HP 5 ! 618: $?0 ! 619: .br ! 620: Substitutes `1' if the current input filename is known, `0' if it is not. ! 621: .HP 5 ! 622: $$ ! 623: .br ! 624: Substitute the (decimal) process number of the (parent) shell. ! 625: .HP 5 ! 626: $< ! 627: .br ! 628: Substitutes a line from the standard ! 629: input, with no further interpretation thereafter. It can be used ! 630: to read from the keyboard in a shell script. ! 631: .sh "Command and filename substitution" ! 632: The remaining substitutions, command and filename substitution, ! 633: are applied selectively to the arguments of builtin commands. ! 634: This means that portions of expressions which are not evaluated are ! 635: not subjected to these expansions. ! 636: For commands which are not internal to the shell, the command ! 637: name is substituted separately from the argument list. ! 638: This occurs very late, ! 639: after input-output redirection is performed, and in a child ! 640: of the main shell. ! 641: .sh "Command substitution" ! 642: Command substitution is indicated by a command enclosed in `\*(ga'. ! 643: The output from such a command is normally broken into separate words ! 644: at blanks, tabs and newlines, with null words being discarded, ! 645: this text then replacing the original string. ! 646: Within `"'s, only newlines force new words; blanks and tabs are preserved. ! 647: .PP ! 648: In any case, the single final newline does not force a new word. ! 649: Note that it is thus possible for a command substitution to yield ! 650: only part of a word, even if the command outputs a complete line. ! 651: .sh "Filename substitution" ! 652: If a word contains any of the characters `*', `?', `[' or `{' ! 653: or begins with the character `~', then that word is a candidate for ! 654: filename substitution, also known as `globbing'. ! 655: This word is then regarded as a pattern, and replaced with an alphabetically ! 656: sorted list of file names which match the pattern. ! 657: In a list of words specifying filename substitution it is an error for ! 658: no pattern to match an existing file name, but it is not required ! 659: for each pattern to match. ! 660: Only the metacharacters `*', `?' and `[' imply pattern matching, ! 661: the characters `~' and `{' being more akin to abbreviations. ! 662: .PP ! 663: In matching filenames, the character `.' at the beginning of a filename ! 664: or immediately following a `/', as well as the character `/' must ! 665: be matched explicitly. ! 666: The character `*' matches any string of characters, including the null ! 667: string. ! 668: The character `?' matches any single character. ! 669: The sequence `[...]' matches any one of the characters enclosed. ! 670: Within `[...]', ! 671: a pair of characters separated by `\-' matches any character lexically between ! 672: the two. ! 673: .PP ! 674: The character `~' at the beginning of a filename is used to refer to home ! 675: directories. ! 676: Standing alone, i.e. `~' it expands to the invokers home directory as reflected ! 677: in the value of the variable ! 678: .I home. ! 679: When followed by a name consisting of letters, digits and `\-' characters ! 680: the shell searches for a user with that name and substitutes their ! 681: home directory; thus `~ken' might expand to `/usr/ken' and `~ken/chmach' ! 682: to `/usr/ken/chmach'. ! 683: If the character `~' is followed by a character other than a letter or `/' ! 684: or appears not at the beginning of a word, ! 685: it is left undisturbed. ! 686: .PP ! 687: The metanotation `a{b,c,d}e' is a shorthand for `abe ace ade'. ! 688: Left to right order is preserved, with results of matches being sorted ! 689: separately at a low level to preserve this order. ! 690: This construct may be nested. ! 691: Thus `~source/s1/{oldls,ls}.c' expands to ! 692: `/usr/source/s1/oldls.c /usr/source/s1/ls.c' ! 693: whether or not these files exist without any chance of error ! 694: if the home directory for `source' is `/usr/source'. ! 695: Similarly `../{memo,*box}' might expand to `../memo ../box ../mbox'. ! 696: (Note that `memo' was not sorted with the results of matching `*box'.) ! 697: As a special case `{', `}' and `{}' are passed undisturbed. ! 698: .sh Input/output ! 699: The standard input and standard output of a command may be redirected ! 700: with the following syntax: ! 701: .HP 5 ! 702: < name ! 703: .br ! 704: Open file ! 705: .I name ! 706: (which is first variable, command and filename expanded) as the standard ! 707: input. ! 708: .HP 5 ! 709: << word ! 710: .br ! 711: Read the shell input up to a line which is identical to ! 712: .I word. ! 713: .I Word ! 714: is not subjected to variable, filename or command substitution, ! 715: and each input line is compared to ! 716: .I word ! 717: before any substitutions are done on this input line. ! 718: Unless a quoting `\e', `"', `\*(aa' or `\*(ga' appears in ! 719: .I word ! 720: variable and command substitution is performed on the intervening lines, ! 721: allowing `\e' to quote `$', `\e' and `\*(ga'. ! 722: Commands which are substituted have all blanks, tabs, and newlines ! 723: preserved, except for the final newline which is dropped. ! 724: The resultant text is placed in an anonymous temporary file which ! 725: is given to the command as standard input. ! 726: .HP 5 ! 727: > name ! 728: .br ! 729: .ns ! 730: .HP 5 ! 731: >! name ! 732: .br ! 733: .ns ! 734: .HP 5 ! 735: >& name ! 736: .br ! 737: .ns ! 738: .HP 5 ! 739: >&! name ! 740: .br ! 741: The file ! 742: .I name ! 743: is used as standard output. ! 744: If the file does not exist then it is created; ! 745: if the file exists, its is truncated, its previous contents being lost. ! 746: .IP ! 747: If the variable ! 748: .I noclobber ! 749: is set, then the file must not exist or be a character special file (e.g. a ! 750: terminal or `/dev/null') or an error results. ! 751: This helps prevent accidental destruction of files. ! 752: In this case the `!' forms can be used and suppress this check. ! 753: .IP ! 754: The forms involving `&' route the diagnostic output into the specified ! 755: file as well as the standard output. ! 756: .I Name ! 757: is expanded in the same way as `<' input filenames are. ! 758: .HP 5 ! 759: >> name ! 760: .br ! 761: .ns ! 762: .HP 5 ! 763: >>& name ! 764: .br ! 765: .ns ! 766: .HP 5 ! 767: >>! name ! 768: .br ! 769: .ns ! 770: .HP 5 ! 771: >>&! name ! 772: .br ! 773: Uses file ! 774: .I name ! 775: as standard output like `>' but places output at the end of the file. ! 776: If the variable ! 777: .I noclobber ! 778: is set, then it is an error for the file not to exist unless ! 779: one of the `!' forms is given. ! 780: Otherwise similar to `>'. ! 781: .PP ! 782: A command receives the environment in which the shell was ! 783: invoked as modified by the input-output parameters and ! 784: the presence of the command in a pipeline. ! 785: Thus, unlike some previous shells, commands run from a file of shell commands ! 786: have no access to the text of the commands by default; rather ! 787: they receive the original standard input of the shell. ! 788: The `<<' mechanism should be used to present inline data. ! 789: This permits shell command scripts to function as components of pipelines ! 790: and allows the shell to block read its input. ! 791: Note that the default standard input for a command run detached is ! 792: .B not ! 793: modified to be the empty file `/dev/null'; rather the standard input ! 794: remains as the original standard input of the shell. If this is a terminal ! 795: and if the process attempts to read from the terminal, then the process ! 796: will block and the user will be notified (see ! 797: .B Jobs ! 798: above). ! 799: .PP ! 800: Diagnostic output may be directed through a pipe with the standard output. ! 801: Simply use the form `|\|&' rather than just `|'. ! 802: .sh Expressions ! 803: A number of the builtin commands (to be described subsequently) ! 804: take expressions, in which the operators are similar to those of C, with ! 805: the same precedence. ! 806: These expressions appear in the ! 807: .I @, ! 808: .I exit, ! 809: .I if, ! 810: and ! 811: .I while ! 812: commands. ! 813: The following operators are available: ! 814: .DT ! 815: .PP ! 816: |\|\|| && | \*(ua & == != =~ !~ <= >= < > << >> + \- * / % ! ~ ( ) ! 817: .PP ! 818: Here the precedence increases to the right, ! 819: `==' `!=' `=~' and `!~', `<=' `>=' `<' and `>', `<<' and `>>', `+' and `\-', ! 820: `*' `/' and `%' being, in groups, at the same level. ! 821: The `==' `!=' `=~' and `!~' operators compare their arguments as strings; ! 822: all others operate on numbers. ! 823: The operators `=~' and `!~' are like `!=' and `==' except that the right ! 824: hand side is a ! 825: .I pattern ! 826: (containing, e.g. `*'s, `?'s and instances of `[...]') ! 827: against which the left hand operand is matched. This reduces the ! 828: need for use of the ! 829: .I switch ! 830: statement in shell scripts when all that is really needed is pattern matching. ! 831: .PP ! 832: Strings which begin with `0' are considered octal numbers. ! 833: Null or missing arguments are considered `0'. ! 834: The result of all expressions are strings, ! 835: which represent decimal numbers. ! 836: It is important to note that no two components of an expression can appear ! 837: in the same word; except when adjacent to components of expressions which ! 838: are syntactically significant to the parser (`&' `|' `<' `>' `(' `)') ! 839: they should be surrounded by spaces. ! 840: .PP ! 841: Also available in expressions as primitive operands are command executions ! 842: enclosed in `{' and `}' ! 843: and file enquiries of the form `\-\fIl\fR name' where ! 844: .I l ! 845: is one of: ! 846: .PP ! 847: .DT ! 848: .nf ! 849: r read access ! 850: w write access ! 851: x execute access ! 852: e existence ! 853: o ownership ! 854: z zero size ! 855: f plain file ! 856: d directory ! 857: .fi ! 858: .PP ! 859: The specified name is command and filename expanded and then tested ! 860: to see if it has the specified relationship to the real user. ! 861: If the file does not exist or is inaccessible then all enquiries return ! 862: false, i.e. `0'. ! 863: Command executions succeed, returning true, i.e. `1', ! 864: if the command exits with status 0, otherwise they fail, returning ! 865: false, i.e. `0'. ! 866: If more detailed status information is required then the command ! 867: should be executed outside of an expression and the variable ! 868: .I status ! 869: examined. ! 870: .sh "Control flow" ! 871: The shell contains a number of commands which can be used to regulate the ! 872: flow of control in command files (shell scripts) and ! 873: (in limited but useful ways) from terminal input. ! 874: These commands all operate by forcing the shell to reread or skip in its ! 875: input and, due to the implementation, restrict the placement of some ! 876: of the commands. ! 877: .PP ! 878: The ! 879: .I foreach, ! 880: .I switch, ! 881: and ! 882: .I while ! 883: statements, as well as the ! 884: .I if\-then\-else ! 885: form of the ! 886: .I if ! 887: statement require that the major keywords appear in a single simple command ! 888: on an input line as shown below. ! 889: .PP ! 890: If the shell's input is not seekable, ! 891: the shell buffers up input whenever a loop is being read ! 892: and performs seeks in this internal buffer to accomplish the rereading ! 893: implied by the loop. ! 894: (To the extent that this allows, backward goto's will succeed on ! 895: non-seekable inputs.) ! 896: .sh "Builtin commands" ! 897: Builtin commands are executed within the shell. ! 898: If a builtin command occurs as any component of a pipeline ! 899: except the last then it is executed in a subshell. ! 900: .HP 5 ! 901: .B alias ! 902: .br ! 903: .ns ! 904: .HP 5 ! 905: .BR alias " name" ! 906: .br ! 907: .ns ! 908: .HP 5 ! 909: .BR alias " name wordlist" ! 910: .br ! 911: The first form prints all aliases. ! 912: The second form prints the alias for name. ! 913: The final form assigns the specified ! 914: .I wordlist ! 915: as the alias of ! 916: .I name; ! 917: .I wordlist ! 918: is command and filename substituted. ! 919: .I Name ! 920: is not allowed to be ! 921: .I alias ! 922: or ! 923: .I unalias. ! 924: .HP 5 ! 925: .B alloc ! 926: .br ! 927: Shows the amount of dynamic memory acquired, broken down into used and ! 928: free memory. ! 929: With an argument shows the number of free and used blocks in each size ! 930: category. The categories start at size 8 and double at each step. ! 931: This command's output may vary across system types, since ! 932: systems other than the VAX may use a different memory allocator. ! 933: .HP 5 ! 934: .B bg ! 935: .br ! 936: .ns ! 937: .HP 5 ! 938: \fBbg\ %\fRjob\ ... ! 939: .br ! 940: Puts the current or specified jobs into the background, continuing them ! 941: if they were stopped. ! 942: .HP 5 ! 943: .B break ! 944: .br ! 945: Causes execution to resume after the ! 946: .I end ! 947: of the nearest enclosing ! 948: .I foreach ! 949: or ! 950: .I while. ! 951: The remaining commands on the current line are executed. ! 952: Multi-level breaks are thus possible by writing them all on one line. ! 953: .HP 5 ! 954: .B breaksw ! 955: .br ! 956: Causes a break from a ! 957: .I switch, ! 958: resuming after the ! 959: .I endsw. ! 960: .HP 5 ! 961: .BR case " label:" ! 962: .br ! 963: A label in a ! 964: .I switch ! 965: statement as discussed below. ! 966: .HP 5 ! 967: .B cd ! 968: .br ! 969: .ns ! 970: .HP 5 ! 971: .BR cd " name" ! 972: .br ! 973: .ns ! 974: .HP 5 ! 975: .B chdir ! 976: .br ! 977: .ns ! 978: .HP 5 ! 979: .BR chdir " name" ! 980: .br ! 981: Change the shell's working directory to directory ! 982: .I name. ! 983: If no argument is given then change to the home directory of the user. ! 984: .br ! 985: If ! 986: .I name ! 987: is not found as a subdirectory of the current directory (and does not begin ! 988: with `/', `./' or `../'), then each ! 989: component of the variable ! 990: .I cdpath ! 991: is checked to see if it has a subdirectory ! 992: .I name. ! 993: Finally, if all else fails but ! 994: .I name ! 995: is a shell variable whose value begins with `/', then this ! 996: is tried to see if it is a directory. ! 997: .HP 5 ! 998: .B continue ! 999: .br ! 1000: Continue execution of the nearest enclosing ! 1001: .I while ! 1002: or ! 1003: .I foreach. ! 1004: The rest of the commands on the current line are executed. ! 1005: .HP 5 ! 1006: .B default: ! 1007: .br ! 1008: Labels the default case in a ! 1009: .I switch ! 1010: statement. ! 1011: The default should come after all ! 1012: .I case ! 1013: labels. ! 1014: .HP 5 ! 1015: .BR "dirs" ! 1016: .br ! 1017: Prints the directory stack; the top of the stack is at the left, ! 1018: the first directory in the stack being the current directory. ! 1019: .HP 5 ! 1020: .BR echo " wordlist" ! 1021: .br ! 1022: .ns ! 1023: .HP 5 ! 1024: .BR "echo \-n" " wordlist" ! 1025: .br ! 1026: The specified words are written to the shells standard output, separated ! 1027: by spaces, and terminated with a newline unless the ! 1028: .B \-n ! 1029: option is specified. ! 1030: .HP 5 ! 1031: .B else ! 1032: .br ! 1033: .ns ! 1034: .HP 5 ! 1035: .B end ! 1036: .br ! 1037: .ns ! 1038: .HP 5 ! 1039: .B endif ! 1040: .br ! 1041: .ns ! 1042: .HP 5 ! 1043: .B endsw ! 1044: .br ! 1045: See the description of the ! 1046: .I foreach, ! 1047: .I if, ! 1048: .I switch, ! 1049: and ! 1050: .I while ! 1051: statements below. ! 1052: .HP 5 ! 1053: .BR eval " arg ..." ! 1054: .br ! 1055: (As in ! 1056: .IR sh (1).) ! 1057: The arguments are read as input to the shell and the resulting ! 1058: command(s) executed in the context of the current shell. ! 1059: This is usually used to execute commands ! 1060: generated as the result of command or variable substitution, since ! 1061: parsing occurs before these substitutions. See ! 1062: .IR tset (1) ! 1063: for an example of using ! 1064: .IR eval . ! 1065: .HP 5 ! 1066: .BR exec " command" ! 1067: .br ! 1068: The specified command is executed in place of the current shell. ! 1069: .HP 5 ! 1070: .B exit ! 1071: .br ! 1072: .ns ! 1073: .HP 5 ! 1074: .BR exit (expr) ! 1075: .br ! 1076: The shell exits either with the value of the ! 1077: .I status ! 1078: variable (first form) or with the value of the specified ! 1079: .I expr ! 1080: (second form). ! 1081: .HP 5 ! 1082: .B fg ! 1083: .br ! 1084: .ns ! 1085: .HP 5 ! 1086: \fBfg\ %\fRjob\ ... ! 1087: .br ! 1088: Brings the current or specified jobs into the foreground, continuing them if ! 1089: they were stopped. ! 1090: .HP 5 ! 1091: .BR foreach " name (wordlist)" ! 1092: .br ! 1093: .ns ! 1094: .HP 5 ! 1095: \ ... ! 1096: .br ! 1097: .ns ! 1098: .HP 5 ! 1099: .B end ! 1100: .br ! 1101: The variable ! 1102: .I name ! 1103: is successively set to each member of ! 1104: .I wordlist ! 1105: and the sequence of commands between this command and the matching ! 1106: .I end ! 1107: are executed. ! 1108: (Both ! 1109: .I foreach ! 1110: and ! 1111: .I end ! 1112: must appear alone on separate lines.) ! 1113: .IP ! 1114: The builtin command ! 1115: .I continue ! 1116: may be used to continue the loop prematurely and the builtin ! 1117: command ! 1118: .I break ! 1119: to terminate it prematurely. ! 1120: When this command is read from the terminal, the loop is read up once ! 1121: prompting with `?' before any statements in the loop are executed. ! 1122: If you make a mistake typing in a loop at the terminal you can rub it out. ! 1123: .HP 5 ! 1124: .BR glob " wordlist" ! 1125: .br ! 1126: Like ! 1127: .I echo ! 1128: but no `\e' escapes are recognized and words are delimited ! 1129: by null characters in the output. ! 1130: Useful for programs which wish to use the shell to filename expand a list ! 1131: of words. ! 1132: .HP 5 ! 1133: .BR goto " word" ! 1134: .br ! 1135: The specified ! 1136: .I word ! 1137: is filename and command expanded to yield a string of the form `label'. ! 1138: The shell rewinds its input as much as possible ! 1139: and searches for a line of the form `label:' ! 1140: possibly preceded by blanks or tabs. ! 1141: Execution continues after the specified line. ! 1142: .HP 5 ! 1143: .BR hashstat ! 1144: .br ! 1145: Print a statistics line indicating how effective the internal hash ! 1146: table has been at locating commands (and avoiding ! 1147: .IR exec 's). ! 1148: An ! 1149: .I exec ! 1150: is attempted for each component of the ! 1151: .I path ! 1152: where the hash function indicates a possible hit, and in each component ! 1153: which does not begin with a `/'. ! 1154: .HP 5 ! 1155: .B history ! 1156: .br ! 1157: .ns ! 1158: .HP 5 ! 1159: .BI history " n" ! 1160: .br ! 1161: .ns ! 1162: .HP 5 ! 1163: .BI "history \-r" " n" ! 1164: .br ! 1165: .ns ! 1166: .HP 5 ! 1167: .BI "history \-h" " n" ! 1168: .br ! 1169: Displays the history event list; if \fIn\fR is given only the ! 1170: .I n ! 1171: most recent events are printed. ! 1172: The ! 1173: .B \-r ! 1174: option reverses the order of printout to be most recent first ! 1175: rather than oldest first. ! 1176: The ! 1177: .B \-h ! 1178: option causes the history list to be printed without leading numbers. ! 1179: This is used to produce files suitable for sourceing using the \-h ! 1180: option to ! 1181: .IR source . ! 1182: .HP 5 ! 1183: .BR if " (expr) command" ! 1184: .br ! 1185: If the specified expression evaluates true, then the single ! 1186: .I command ! 1187: with arguments is executed. ! 1188: Variable substitution on ! 1189: .IR command "" ! 1190: happens early, at the same ! 1191: time it does for the rest of the ! 1192: .I if ! 1193: command. ! 1194: .I Command ! 1195: must be a simple command, not ! 1196: a pipeline, a command list, or a parenthesized command list. ! 1197: Input/output redirection occurs even if ! 1198: .I expr ! 1199: is false, when command is ! 1200: .B not ! 1201: executed (this is a bug). ! 1202: .HP 5 ! 1203: .BR if " (expr) " "then" ! 1204: .br ! 1205: .ns ! 1206: .HP 5 ! 1207: \ ... ! 1208: .br ! 1209: .ns ! 1210: .HP 5 ! 1211: .BR else " " "if\fR (expr2) \fBthen" ! 1212: .br ! 1213: .ns ! 1214: .HP 5 ! 1215: \ ... ! 1216: .br ! 1217: .ns ! 1218: .HP 5 ! 1219: .B else ! 1220: .br ! 1221: .ns ! 1222: .HP 5 ! 1223: \ ... ! 1224: .br ! 1225: .ns ! 1226: .HP 5 ! 1227: .B endif ! 1228: .br ! 1229: If the specified ! 1230: .IR expr "" ! 1231: is true then the commands to the first ! 1232: .I else ! 1233: are executed; otherwise if ! 1234: .IR expr2 "" ! 1235: is true then the commands to the ! 1236: second \fIelse\fR are executed, etc. ! 1237: Any number of ! 1238: .I else-if ! 1239: pairs are possible; only one ! 1240: .I endif ! 1241: is needed. ! 1242: The ! 1243: .I else ! 1244: part is likewise optional. ! 1245: (The words ! 1246: .I else ! 1247: and ! 1248: .I endif ! 1249: must appear at the beginning of input lines; ! 1250: the ! 1251: .I if ! 1252: must appear alone on its input line or after an ! 1253: .I else.) ! 1254: .HP 5 ! 1255: .B jobs ! 1256: .br ! 1257: .ns ! 1258: .HP 5 ! 1259: .B "jobs \-l" ! 1260: .br ! 1261: Lists the active jobs; given the ! 1262: .B \-l ! 1263: options lists process id's in addition to the normal information. ! 1264: .HP 5 ! 1265: \fBkill %\fRjob ! 1266: .br ! 1267: .ns ! 1268: .HP 5 ! 1269: \fBkill\ \-\fRsig\ \fB%\fRjob\ ... ! 1270: .br ! 1271: .ns ! 1272: .HP 5 ! 1273: \fBkill\fR\ pid ! 1274: .br ! 1275: .ns ! 1276: .HP 5 ! 1277: \fBkill\ \-\fRsig\ pid\ ... ! 1278: .br ! 1279: .ns ! 1280: .HP 5 ! 1281: \fBkill\ \-l\fR ! 1282: .br ! 1283: Sends either the TERM (terminate) signal or the ! 1284: specified signal to the specified jobs or processes. ! 1285: Signals are either given by number or by names (as given in ! 1286: .I /usr/include/signal.h, ! 1287: stripped of the prefix ``SIG''). ! 1288: The signal names are listed by ``kill \-l''. ! 1289: There is no default, saying just `kill' does not ! 1290: send a signal to the current job. ! 1291: If the signal being sent is TERM (terminate) or HUP (hangup), ! 1292: then the job or process will be sent a CONT (continue) signal as well. ! 1293: .HP ! 1294: \fBlimit\fR ! 1295: .br ! 1296: .ns ! 1297: .HP 5 ! 1298: \fBlimit\fR \fIresource\fR ! 1299: .br ! 1300: .ns ! 1301: .HP 5 ! 1302: \fBlimit\fR \fIresource\fR \fImaximum-use\fR ! 1303: .br ! 1304: .ns ! 1305: .HP 5 ! 1306: \fBlimit\ \-h\fR ! 1307: .br ! 1308: .ns ! 1309: .HP 5 ! 1310: \fBlimit\ \-h\fR \fIresource\fR ! 1311: .br ! 1312: .ns ! 1313: .HP 5 ! 1314: \fBlimit\ \-h\fR \fIresource\fR \fImaximum-use\fR ! 1315: .br ! 1316: Limits the consumption by the current process and each process ! 1317: it creates to not individually exceed \fImaximum-use\fR on the ! 1318: specified \fIresource\fR. If no \fImaximum-use\fR is given, then ! 1319: the current limit is printed; if no \fIresource\fR is given, then ! 1320: all limitations are given. If the \fB\-h\fR ! 1321: flag is given, the hard limits are used instead of the current ! 1322: limits. The hard limits impose a ceiling on the values of ! 1323: the current limits. Only the super-user may raise the hard limits, ! 1324: but a user may lower or raise the current limits within the legal range. ! 1325: .IP ! 1326: Resources controllable currently include \fIcputime\fR (the maximum ! 1327: number of cpu-seconds to be used by each process), \fIfilesize\fR ! 1328: (the largest single file which can be created), \fIdatasize\fR ! 1329: (the maximum growth of the data+stack region via ! 1330: .IR sbrk (2) ! 1331: beyond the end of the program text), \fIstacksize\fR (the maximum ! 1332: size of the automatically-extended stack region), and \fIcoredumpsize\fR ! 1333: (the size of the largest core dump that will be created). ! 1334: .IP ! 1335: The \fImaximum-use\fR may be given as a (floating point or integer) ! 1336: number followed by a scale factor. For all limits other than \fIcputime\fR ! 1337: the default scale is `k' or `kilobytes' (1024 bytes); ! 1338: a scale factor of `m' or `megabytes' may also be used. ! 1339: For ! 1340: .I cputime ! 1341: the default scaling is `seconds', while `m' for minutes ! 1342: or `h' for hours, or a time of the form `mm:ss' giving minutes ! 1343: and seconds may be used. ! 1344: .IP ! 1345: For both \fIresource\fR names and scale factors, unambiguous prefixes ! 1346: of the names suffice. ! 1347: .HP 5 ! 1348: .B login ! 1349: .br ! 1350: Terminate a login shell, replacing it with an instance of ! 1351: .B /bin/login. ! 1352: This is one way to log off, included for compatibility with ! 1353: .IR sh (1). ! 1354: .HP 5 ! 1355: .B logout ! 1356: .br ! 1357: Terminate a login shell. ! 1358: Especially useful if ! 1359: .I ignoreeof ! 1360: is set. ! 1361: .HP 5 ! 1362: .B nice ! 1363: .br ! 1364: .ns ! 1365: .HP 5 ! 1366: .BR nice " +number" ! 1367: .br ! 1368: .ns ! 1369: .HP 5 ! 1370: .BR nice " command" ! 1371: .br ! 1372: .ns ! 1373: .HP 5 ! 1374: .BR nice " +number command" ! 1375: .br ! 1376: The first form sets the ! 1377: scheduling priority ! 1378: for this shell to 4. ! 1379: The second form sets the ! 1380: priority ! 1381: to the given number. ! 1382: The final two forms run command at priority 4 and ! 1383: .I number ! 1384: respectively. ! 1385: The greater the number, the less cpu the process will get. ! 1386: The super-user may specify negative priority by using `nice \-number ...'. ! 1387: Command is always executed in a sub-shell, and the restrictions ! 1388: placed on commands in simple ! 1389: .I if ! 1390: statements apply. ! 1391: .HP 5 ! 1392: .B nohup ! 1393: .br ! 1394: .ns ! 1395: .HP 5 ! 1396: .BR "nohup" " command" ! 1397: .br ! 1398: The first form can be used in shell scripts to cause hangups to be ! 1399: ignored for the remainder of the script. ! 1400: The second form causes the specified command to be run with hangups ! 1401: ignored. ! 1402: All processes detached with `&' are effectively ! 1403: .I nohup'ed. ! 1404: .HP 5 ! 1405: .B notify ! 1406: .br ! 1407: .ns ! 1408: .HP 5 ! 1409: \fBnotify\ %\fRjob\ ... ! 1410: .br ! 1411: Causes the shell to notify the user asynchronously when the status of the ! 1412: current or specified jobs changes; normally notification is presented ! 1413: before a prompt. This is automatic if the shell variable ! 1414: .I notify ! 1415: is set. ! 1416: .HP 5 ! 1417: .B onintr ! 1418: .br ! 1419: .ns ! 1420: .HP 5 ! 1421: .BR onintr " \-" ! 1422: .br ! 1423: .ns ! 1424: .HP 5 ! 1425: .BR onintr " label" ! 1426: .br ! 1427: Control the action of the shell on interrupts. ! 1428: The first form restores the default action of the shell on interrupts ! 1429: which is to terminate shell scripts or to return to the terminal command ! 1430: input level. ! 1431: The second form `onintr \-' causes all interrupts to be ignored. ! 1432: The final form causes the shell to execute a `goto label' when ! 1433: an interrupt is received or a child process terminates because ! 1434: it was interrupted. ! 1435: .IP ! 1436: In any case, if the shell is running detached and interrupts are ! 1437: being ignored, all forms of ! 1438: .I onintr ! 1439: have no meaning and interrupts ! 1440: continue to be ignored by the shell and all invoked commands. ! 1441: .HP 5 ! 1442: .BR "popd" ! 1443: .br ! 1444: .ns ! 1445: .HP 5 ! 1446: .BR "popd" " +n" ! 1447: .br ! 1448: Pops the directory stack, returning to the new top directory. ! 1449: With an argument `+\fIn\fR' discards the \fIn\fR\|th ! 1450: entry in the stack. ! 1451: The elements of the directory stack are numbered from 0 starting at the top. ! 1452: .HP 5 ! 1453: .BR "pushd" ! 1454: .br ! 1455: .ns ! 1456: .HP 5 ! 1457: .BR "pushd" " name" ! 1458: .br ! 1459: .ns ! 1460: .HP 5 ! 1461: .BR "pushd" " +n" ! 1462: .br ! 1463: With no arguments, ! 1464: .I pushd ! 1465: exchanges the top two elements of the directory stack. ! 1466: Given a ! 1467: .I name ! 1468: argument, ! 1469: .I pushd ! 1470: changes to the new directory (ala ! 1471: .I cd) ! 1472: and pushes the old current working directory ! 1473: (as in ! 1474: .I csw) ! 1475: onto the directory stack. ! 1476: With a numeric argument, rotates the \fIn\fR\|th argument of the directory ! 1477: stack around to be the top element and changes to it. The members ! 1478: of the directory stack are numbered from the top starting at 0. ! 1479: .HP 5 ! 1480: .BR rehash ! 1481: .br ! 1482: Causes the internal hash table of the contents of the directories in ! 1483: the ! 1484: .I path ! 1485: variable to be recomputed. This is needed if new commands are added ! 1486: to directories in the ! 1487: .I path ! 1488: while you are logged in. This should only be necessary if you add ! 1489: commands to one of your own directories, or if a systems programmer ! 1490: changes the contents of one of the system directories. ! 1491: .HP 5 ! 1492: .BR repeat " count command" ! 1493: .br ! 1494: The specified ! 1495: .I command ! 1496: which is subject to the same restrictions ! 1497: as the ! 1498: .I command ! 1499: in the one line ! 1500: .I if ! 1501: statement above, ! 1502: is executed ! 1503: .I count ! 1504: times. ! 1505: I/O redirections occur exactly once, even if ! 1506: .I count ! 1507: is 0. ! 1508: .HP 5 ! 1509: .B set ! 1510: .br ! 1511: .ns ! 1512: .HP 5 ! 1513: .BR set " name" ! 1514: .br ! 1515: .ns ! 1516: .HP 5 ! 1517: .BR set " name=word" ! 1518: .br ! 1519: .ns ! 1520: .HP 5 ! 1521: .BR set " name[index]=word" ! 1522: .br ! 1523: .ns ! 1524: .HP 5 ! 1525: .BR set " name=(wordlist)" ! 1526: .br ! 1527: The first form of the command shows the value of all shell variables. ! 1528: Variables which have other than a single word as value print as a parenthesized ! 1529: word list. ! 1530: The second form sets ! 1531: .I name ! 1532: to the null string. ! 1533: The third form sets ! 1534: .I name ! 1535: to the single ! 1536: .I word. ! 1537: The fourth form sets ! 1538: the ! 1539: .I index'th ! 1540: component of name to word; ! 1541: this component must already exist. ! 1542: The final form sets ! 1543: .I name ! 1544: to the list of words in ! 1545: .I wordlist. ! 1546: In all cases the value is command and filename expanded. ! 1547: .IP ! 1548: These arguments may be repeated to set multiple values in a single set command. ! 1549: Note however, that variable expansion happens for all arguments before any ! 1550: setting occurs. ! 1551: .HP 5 ! 1552: .BR setenv ! 1553: .br ! 1554: .ns ! 1555: .HP 5 ! 1556: .BR setenv " name value" ! 1557: .br ! 1558: .ns ! 1559: .HP 5 ! 1560: .BR setenv " name" ! 1561: .br ! 1562: The first form lists all current environment variables. ! 1563: The last form sets the value of environment variable ! 1564: .I name ! 1565: to be ! 1566: .I value, ! 1567: a single string. The second form sets ! 1568: .I name ! 1569: to an empty string. ! 1570: The most commonly used environment variable USER, TERM, and PATH ! 1571: are automatically imported to and exported from the ! 1572: .I csh ! 1573: variables ! 1574: .I user, ! 1575: .I term, ! 1576: and ! 1577: .I path; ! 1578: there is no need to use ! 1579: .I setenv ! 1580: for these. ! 1581: .HP 5 ! 1582: .B shift ! 1583: .br ! 1584: .ns ! 1585: .HP 5 ! 1586: .BR shift " variable" ! 1587: .br ! 1588: The members of ! 1589: .I argv ! 1590: are shifted to the left, discarding ! 1591: .I argv[1]. ! 1592: It is an error for ! 1593: .I argv ! 1594: not to be set or to have less than one word as value. ! 1595: The second form performs the same function on the specified variable. ! 1596: .HP 5 ! 1597: .BR source " name" ! 1598: .br ! 1599: .ns ! 1600: .HP 5 ! 1601: .BR "source \-h" " name" ! 1602: .br ! 1603: The shell reads commands from ! 1604: .I name. ! 1605: .I Source ! 1606: commands may be nested; if they are nested too deeply the shell may ! 1607: run out of file descriptors. ! 1608: An error in a ! 1609: .I source ! 1610: at any level terminates all nested ! 1611: .I source ! 1612: commands. ! 1613: Normally input during ! 1614: .I source ! 1615: commands is not placed on the history list; ! 1616: the \-h option causes the commands to be placed in the ! 1617: history list without being executed. ! 1618: .HP 5 ! 1619: .B stop ! 1620: .br ! 1621: .ns ! 1622: .HP 5 ! 1623: \fBstop\ %\fRjob\ ... ! 1624: .br ! 1625: Stops the current or specified job which is executing in the background. ! 1626: .HP 5 ! 1627: .B suspend ! 1628: .br ! 1629: .ns ! 1630: Causes the shell to stop in its tracks, much as if it had been sent a stop ! 1631: signal with \fB^Z\fR. This is most often used to stop shells started by ! 1632: .IR su (1). ! 1633: .HP 5 ! 1634: .BR switch " (string)" ! 1635: .br ! 1636: .ns ! 1637: .HP 5 ! 1638: .BR case " str1:" ! 1639: .br ! 1640: .ns ! 1641: .HP 5 ! 1642: \ ... ! 1643: .br ! 1644: .ns ! 1645: .HP 5 ! 1646: \ ! 1647: .B breaksw ! 1648: .br ! 1649: .ns ! 1650: .HP 5 ! 1651: \&... ! 1652: .br ! 1653: .ns ! 1654: .HP 5 ! 1655: .B default: ! 1656: .br ! 1657: .ns ! 1658: .HP 5 ! 1659: \ ... ! 1660: .br ! 1661: .ns ! 1662: .HP 5 ! 1663: \ ! 1664: .B breaksw ! 1665: .br ! 1666: .ns ! 1667: .HP 5 ! 1668: .B endsw ! 1669: .br ! 1670: Each case label is successively matched, against the specified ! 1671: .I string ! 1672: which is first command and filename expanded. ! 1673: The file metacharacters `*', `?' and `[...]' may be used in the case labels, ! 1674: which are variable expanded. ! 1675: If none of the labels match before a `default' label is found, then ! 1676: the execution begins after the default label. ! 1677: Each case label and the default label must appear at the beginning of a line. ! 1678: The command ! 1679: .I breaksw ! 1680: causes execution to continue after the ! 1681: .I endsw. ! 1682: Otherwise control may fall through case labels and default labels as in C. ! 1683: If no label matches and there is no default, execution continues after ! 1684: the ! 1685: .I endsw. ! 1686: .HP 5 ! 1687: .B time ! 1688: .br ! 1689: .ns ! 1690: .HP 5 ! 1691: .BR time " command" ! 1692: .br ! 1693: With no argument, a summary of time used by this shell and its children ! 1694: is printed. ! 1695: If arguments are given ! 1696: the specified simple command is timed and a time summary ! 1697: as described under the ! 1698: .I time ! 1699: variable is printed. If necessary, an extra shell is created to print the time ! 1700: statistic when the command completes. ! 1701: .HP 5 ! 1702: .B umask ! 1703: .br ! 1704: .ns ! 1705: .HP 5 ! 1706: .BR umask " value" ! 1707: .br ! 1708: The file creation mask is displayed (first form) or set to the specified ! 1709: value (second form). The mask is given in octal. Common values for ! 1710: the mask are 002 giving all access to the group and read and execute ! 1711: access to others or 022 giving all access except no write access for ! 1712: users in the group or others. ! 1713: .HP 5 ! 1714: .BR unalias " pattern" ! 1715: .br ! 1716: All aliases whose names match the specified pattern are discarded. ! 1717: Thus all aliases are removed by `unalias *'. ! 1718: It is not an error for nothing to be ! 1719: .I unaliased. ! 1720: .HP 5 ! 1721: .BR unhash ! 1722: .br ! 1723: Use of the internal hash table to speed location of executed programs ! 1724: is disabled. ! 1725: .HP 5 ! 1726: \fBunlimit\fR ! 1727: .br ! 1728: .ns ! 1729: .HP 5 ! 1730: \fBunlimit\fR \fIresource\fR ! 1731: .br ! 1732: .ns ! 1733: .HP 5 ! 1734: \fBunlimit\ \-h\fR ! 1735: .br ! 1736: .ns ! 1737: .HP 5 ! 1738: \fBunlimit\ \-h\fR \fIresource\fR ! 1739: .br ! 1740: Removes the limitation on \fIresource\fR. If no \fIresource\fR ! 1741: is specified, then all \fIresource\fR limitations are removed. If ! 1742: \fB\-h\fR is given, the corresponding hard limits are removed. Only the ! 1743: super-user may do this. ! 1744: .HP 5 ! 1745: .BR unset " pattern" ! 1746: .br ! 1747: All variables whose names match the specified pattern are removed. ! 1748: Thus all variables are removed by `unset *'; this has noticeably ! 1749: distasteful side-effects. ! 1750: It is not an error for nothing to be ! 1751: .I unset. ! 1752: .HP 5 ! 1753: .BR unsetenv " pattern" ! 1754: .br ! 1755: Removes all variables whose name match the specified pattern from the ! 1756: environment. See also the ! 1757: .I setenv ! 1758: command above and ! 1759: .IR printenv (1). ! 1760: .HP 5 ! 1761: .B wait ! 1762: .br ! 1763: All background jobs are waited for. ! 1764: It the shell is interactive, then an interrupt can disrupt the wait, ! 1765: at which time the shell prints names and job numbers of all jobs ! 1766: known to be outstanding. ! 1767: .HP 5 ! 1768: .BR while " (expr)" ! 1769: .br ! 1770: .ns ! 1771: .HP 5 ! 1772: \ ... ! 1773: .br ! 1774: .ns ! 1775: .HP 5 ! 1776: .B end ! 1777: .br ! 1778: While the specified expression evaluates non-zero, the commands between ! 1779: the ! 1780: .I while ! 1781: and the matching end are evaluated. ! 1782: .I Break ! 1783: and ! 1784: .I continue ! 1785: may be used to terminate or continue the loop prematurely. ! 1786: (The ! 1787: .I while ! 1788: and ! 1789: .I end ! 1790: must appear alone on their input lines.) ! 1791: Prompting occurs here the first time through the loop as for the ! 1792: .I foreach ! 1793: statement if the input is a terminal. ! 1794: .HP 5 ! 1795: \fB%\fRjob ! 1796: .br ! 1797: Brings the specified job into the foreground. ! 1798: .HP 5 ! 1799: \fB%\fRjob \fB&\fR ! 1800: .br ! 1801: Continues the specified job in the background. ! 1802: .HP 5 ! 1803: .B "@" ! 1804: .br ! 1805: .ns ! 1806: .HP 5 ! 1807: .BR "@" " name = expr" ! 1808: .br ! 1809: .ns ! 1810: .HP 5 ! 1811: .BR "@" " name[index] = expr" ! 1812: .br ! 1813: The first form prints the values of all the shell variables. ! 1814: The second form sets the specified ! 1815: .I name ! 1816: to the value of ! 1817: .I expr. ! 1818: If the expression contains `<', `>', `&' or `|' then at least ! 1819: this part of the expression must be placed within `(' `)'. ! 1820: The third form assigns the value of ! 1821: .I expr ! 1822: to the ! 1823: .I index'th ! 1824: argument of ! 1825: .I name. ! 1826: Both ! 1827: .I name ! 1828: and its ! 1829: .I index'th ! 1830: component must already exist. ! 1831: .IP ! 1832: The operators `*=', `+=', etc are available as in C. ! 1833: The space separating the name from the assignment operator is optional. ! 1834: Spaces are, however, mandatory in separating components of ! 1835: .I expr ! 1836: which would otherwise be single words. ! 1837: .IP ! 1838: Special postfix `++' and `\-\|\-' operators increment and decrement ! 1839: .I name ! 1840: respectively, i.e. `@ i++'. ! 1841: .sh "Pre-defined and environment variables" ! 1842: The following variables have special meaning to the shell. ! 1843: Of these, ! 1844: .I argv, ! 1845: .I cwd, ! 1846: .I home, ! 1847: .I path, ! 1848: .I prompt, ! 1849: .I shell ! 1850: and ! 1851: .I status ! 1852: are always set by the shell. ! 1853: Except for ! 1854: .I cwd ! 1855: and ! 1856: .I status ! 1857: this setting occurs only at initialization; ! 1858: these variables will not then be modified unless this is done ! 1859: explicitly by the user. ! 1860: .PP ! 1861: This shell copies the environment variable USER into the variable ! 1862: .I user, ! 1863: TERM into ! 1864: .I term, ! 1865: and ! 1866: HOME into ! 1867: .I home, ! 1868: and copies these back into the environment whenever the normal ! 1869: shell variables are reset. ! 1870: The environment variable PATH is likewise handled; it is not ! 1871: necessary to worry about its setting other than in the file ! 1872: .I \&.cshrc ! 1873: as inferior ! 1874: .I csh ! 1875: processes will import the definition of ! 1876: .I path ! 1877: from the environment, and re-export it if you then change it. ! 1878: .TP 15 ! 1879: .B argv ! 1880: \c ! 1881: Set to the arguments to the shell, it is from this variable that ! 1882: positional parameters are substituted, i.e. `$1' is replaced by ! 1883: `$argv[1]', etc. ! 1884: .TP 15 ! 1885: .B cdpath ! 1886: \c ! 1887: Gives a list of alternate directories searched to find subdirectories ! 1888: in ! 1889: .I chdir ! 1890: commands. ! 1891: .TP 15 ! 1892: .B cwd ! 1893: The full pathname of the current directory. ! 1894: .TP 15 ! 1895: .B echo ! 1896: \c ! 1897: Set when the ! 1898: .B \-x ! 1899: command line option is given. ! 1900: Causes each command and its arguments ! 1901: to be echoed just before it is executed. ! 1902: For non-builtin commands all expansions occur before echoing. ! 1903: Builtin commands are echoed before command and filename substitution, ! 1904: since these substitutions are then done selectively. ! 1905: .TP 15 ! 1906: .B filec ! 1907: Enable file name completion. ! 1908: \c ! 1909: .TP 15 ! 1910: .B histchars ! 1911: \c ! 1912: Can be given a string value to change the characters used in history ! 1913: substitution. The first character of its value is used as the ! 1914: history substitution character, replacing the default character !. ! 1915: The second character of its value replaces the character \(ua in ! 1916: quick substitutions. ! 1917: .TP 15 ! 1918: .B history ! 1919: \c ! 1920: Can be given a numeric value to control the size of the history list. ! 1921: Any command which has been referenced in this many events will not be ! 1922: discarded. ! 1923: Too large values of ! 1924: .I history ! 1925: may run the shell out of memory. ! 1926: The last executed command is always saved on the history list. ! 1927: .TP 15 ! 1928: .B home ! 1929: \c ! 1930: The home directory of the invoker, initialized from the environment. ! 1931: The filename expansion of `\fB~\fR' refers to this variable. ! 1932: .TP 15 ! 1933: .B ignoreeof ! 1934: \c ! 1935: If set the shell ignores ! 1936: end-of-file from input devices which are terminals. ! 1937: This prevents shells from accidentally being killed by control-D's. ! 1938: .TP 15 ! 1939: .B mail ! 1940: \c ! 1941: The files where the shell checks for mail. ! 1942: This is done after each command completion which will result in a prompt, ! 1943: if a specified interval has elapsed. ! 1944: The shell says `You have new mail.' ! 1945: if the file exists with an access time not greater than its modify time. ! 1946: .IP ! 1947: If the first word of the value of ! 1948: .I mail ! 1949: is numeric it specifies a different mail checking interval, in seconds, ! 1950: than the default, which is 10 minutes. ! 1951: .IP ! 1952: If multiple mail files are specified, then the shell says ! 1953: `New mail in ! 1954: .IR name ' ! 1955: when there is mail in the file ! 1956: .I name. ! 1957: .TP 15 ! 1958: .B noclobber ! 1959: \c ! 1960: As described in the section on ! 1961: .I Input/output, ! 1962: restrictions are placed on output redirection to insure that ! 1963: files are not accidentally destroyed, and that `>>' redirections ! 1964: refer to existing files. ! 1965: .TP 15 ! 1966: .B noglob ! 1967: \c ! 1968: If set, filename expansion is inhibited. ! 1969: This is most useful in shell scripts which are not dealing with filenames, ! 1970: or after a list of filenames has been obtained and further expansions ! 1971: are not desirable. ! 1972: .TP 15 ! 1973: .B nonomatch ! 1974: \c ! 1975: If set, it is not an error for a filename expansion to not match any ! 1976: existing files; rather the primitive pattern is returned. ! 1977: It is still an error for the primitive pattern to be malformed, i.e. ! 1978: `echo [' still gives an error. ! 1979: .TP 15 ! 1980: .B notify ! 1981: \c ! 1982: If set, the shell notifies asynchronously of job completions. The ! 1983: default is to rather present job completions just before printing ! 1984: a prompt. ! 1985: .TP 15 ! 1986: .B path ! 1987: \c ! 1988: Each word of the path variable specifies a directory in which ! 1989: commands are to be sought for execution. ! 1990: A null word specifies the current directory. ! 1991: If there is no ! 1992: .I path ! 1993: variable then only full path names will execute. ! 1994: The usual search path is `.', `/bin' and `/usr/bin', but this ! 1995: may vary from system to system. ! 1996: For the super-user the default search path is `/etc', `/bin' and `/usr/bin'. ! 1997: A shell which is given neither the ! 1998: .B \-c ! 1999: nor the ! 2000: .B \-t ! 2001: option will normally hash the contents of the directories in the ! 2002: .I path ! 2003: variable after reading ! 2004: .I \&.cshrc, ! 2005: and each time the ! 2006: .I path ! 2007: variable is reset. If new commands are added to these directories ! 2008: while the shell is active, it may be necessary to give the ! 2009: .I rehash ! 2010: or the commands may not be found. ! 2011: .TP 15 ! 2012: .B prompt ! 2013: \c ! 2014: The string which is printed before each command is read from ! 2015: an interactive terminal input. ! 2016: If a `!' appears in the string it will be replaced by the current event number ! 2017: unless a preceding `\e' is given. ! 2018: Default is `% ', or `# ' for the super-user. ! 2019: .TP 15 ! 2020: .B savehist ! 2021: \c ! 2022: is given a numeric value to control the number of entries of the ! 2023: history list that are saved in ~/.history when the user logs out. ! 2024: Any command which has been referenced in this many events will be saved. ! 2025: During start up the shell sources ~/.history into the history list ! 2026: enabling history to be saved across logins. ! 2027: Too large values of ! 2028: .I savehist ! 2029: will slow down the shell during start up. ! 2030: .TP 15 ! 2031: .B shell ! 2032: \c ! 2033: The file in which the shell resides. ! 2034: This is used in forking shells to interpret files which have execute ! 2035: bits set, but which are not executable by the system. ! 2036: (See the description of ! 2037: .I "Non-builtin Command Execution" ! 2038: below.) ! 2039: Initialized to the (system-dependent) home of the shell. ! 2040: .TP 15 ! 2041: .B status ! 2042: \c ! 2043: The status returned by the last command. ! 2044: If it terminated abnormally, then 0200 is added to the status. ! 2045: Builtin commands which fail return exit status `1', ! 2046: all other builtin commands set status `0'. ! 2047: .TP 15 ! 2048: .B time ! 2049: \c ! 2050: Controls automatic timing of commands. ! 2051: If set, then any command which takes more than this many cpu seconds ! 2052: will cause a line giving user, system, and real times and a utilization ! 2053: percentage which is the ratio of user plus system times to real time ! 2054: to be printed when it terminates. ! 2055: .TP 15 ! 2056: .B verbose ! 2057: \c ! 2058: Set by the ! 2059: .B \-v ! 2060: command line option, causes the words of each command to be printed ! 2061: after history substitution. ! 2062: .sh "Non-builtin command execution" ! 2063: When a command to be executed is found to not be a builtin command ! 2064: the shell attempts to execute the command via ! 2065: .IR execve (2). ! 2066: Each word in the variable ! 2067: .I path ! 2068: names a directory from which the shell will attempt to execute the command. ! 2069: If it is given neither a ! 2070: .B \-c ! 2071: nor a ! 2072: .B \-t ! 2073: option, the shell will hash the names in these directories into an internal ! 2074: table so that it will only try an ! 2075: .I exec ! 2076: in a directory if there is a possibility that the command resides there. ! 2077: This greatly speeds command location when a large number of directories ! 2078: are present in the search path. ! 2079: If this mechanism has been turned off (via ! 2080: .IR unhash ), ! 2081: or if the shell was given a ! 2082: .B \-c ! 2083: or ! 2084: .B \-t ! 2085: argument, and in any case for each directory component of ! 2086: .I path ! 2087: which does not begin with a `/', ! 2088: the shell concatenates with the given command name to form a path name ! 2089: of a file which it then attempts to execute. ! 2090: .PP ! 2091: Parenthesized commands are always executed in a subshell. ! 2092: Thus `(cd ; pwd) ; pwd' prints the ! 2093: .I home ! 2094: directory; leaving you where you were (printing this after the home directory), ! 2095: while `cd ; pwd' leaves you in the ! 2096: .I home ! 2097: directory. ! 2098: Parenthesized commands are most often used to prevent ! 2099: .I chdir ! 2100: from affecting the current shell. ! 2101: .PP ! 2102: If the file has execute permissions but is not an ! 2103: executable binary to the system, then it is assumed to be a ! 2104: file containing shell commands and a new shell is spawned to read it. ! 2105: .PP ! 2106: If there is an ! 2107: .I alias ! 2108: for ! 2109: .I shell ! 2110: then the words of the alias will be prepended to the argument list to form ! 2111: the shell command. ! 2112: The first word of the ! 2113: .I alias ! 2114: should be the full path name of the shell ! 2115: (e.g. `$shell'). ! 2116: Note that this is a special, late occurring, case of ! 2117: .I alias ! 2118: substitution, ! 2119: and only allows words to be prepended to the argument list without modification. ! 2120: .sh "Argument list processing" ! 2121: If argument 0 to the shell is `\-' then this ! 2122: is a login shell. ! 2123: The flag arguments are interpreted as follows: ! 2124: .TP 5 ! 2125: .B \-b ! 2126: \c ! 2127: This flag forces a ``break'' from option processing, causing any further ! 2128: shell arguments to be treated as non-option arguments. ! 2129: The remaining arguments will not be interpreted as shell options. ! 2130: This may be used to pass options to a shell script without confusion ! 2131: or possible subterfuge. ! 2132: The shell will not run a set-user ID script without this option. ! 2133: .TP 5 ! 2134: .B \-c ! 2135: \c ! 2136: Commands are read from the (single) following argument which must ! 2137: be present. ! 2138: Any remaining arguments are placed in ! 2139: .I argv. ! 2140: .TP 5 ! 2141: .B \-e ! 2142: \c ! 2143: The shell exits if any invoked command terminates abnormally ! 2144: or yields a non-zero exit status. ! 2145: .TP 5 ! 2146: .B \-f ! 2147: \c ! 2148: The shell will start faster, because it will neither search for nor ! 2149: execute commands from the file ! 2150: `\&.cshrc' in the invoker's home directory. ! 2151: .TP 5 ! 2152: .B \-i ! 2153: \c ! 2154: The shell is interactive and prompts for its top-level input, ! 2155: even if it appears to not be a terminal. ! 2156: Shells are interactive without this option if their inputs ! 2157: and outputs are terminals. ! 2158: .TP 5 ! 2159: .B \-n ! 2160: \c ! 2161: Commands are parsed, but not executed. ! 2162: This aids in syntactic checking of shell scripts. ! 2163: .TP 5 ! 2164: .B \-s ! 2165: \c ! 2166: Command input is taken from the standard input. ! 2167: .TP 5 ! 2168: .B \-t ! 2169: \c ! 2170: A single line of input is read and executed. ! 2171: A `\e' may be used to escape the newline at the end of this ! 2172: line and continue onto another line. ! 2173: .TP 5 ! 2174: .B \-v ! 2175: \c ! 2176: Causes the ! 2177: .I verbose ! 2178: variable to be set, with the effect ! 2179: that command input is echoed after history substitution. ! 2180: .TP 5 ! 2181: .B \-x ! 2182: \c ! 2183: Causes the ! 2184: .I echo ! 2185: variable to be set, so that commands are echoed immediately before execution. ! 2186: .TP 5 ! 2187: .B \-V ! 2188: \c ! 2189: Causes the ! 2190: .I verbose ! 2191: variable to be set even before `\&.cshrc' is executed. ! 2192: .TP 5 ! 2193: .B \-X ! 2194: \c ! 2195: Is to ! 2196: .B \-x ! 2197: as ! 2198: .B \-V ! 2199: is to ! 2200: .B \-v. ! 2201: .PP ! 2202: After processing of flag arguments, if arguments remain but none of the ! 2203: .B \-c, ! 2204: .B \-i, ! 2205: .B \-s, ! 2206: or ! 2207: .B \-t ! 2208: options was given, the first argument is taken as the name of a file of ! 2209: commands to be executed. ! 2210: The shell opens this file, and saves its name for possible resubstitution ! 2211: by `$0'. ! 2212: Since many systems use either the standard version 6 or version 7 shells ! 2213: whose shell scripts are not compatible with this shell, the shell will ! 2214: execute such a `standard' shell if the first character of a script ! 2215: is not a `#', i.e. if the script does not start with a comment. ! 2216: Remaining arguments initialize the variable ! 2217: .I argv. ! 2218: .sh "Signal handling" ! 2219: The shell normally ignores ! 2220: .I quit ! 2221: signals. ! 2222: Jobs running detached (either by `&' or the \fIbg\fR or \fB%... &\fR ! 2223: commands) are immune to signals generated from the keyboard, including ! 2224: hangups. ! 2225: Other signals have the values which the shell inherited from its parent. ! 2226: The shells handling of interrupts and terminate signals ! 2227: in shell scripts can be controlled by ! 2228: .I onintr. ! 2229: Login shells catch the ! 2230: .I terminate ! 2231: signal; otherwise this signal is passed on to children from the state in the ! 2232: shell's parent. ! 2233: In no case are interrupts allowed when a login shell is reading the file ! 2234: `\&.logout'. ! 2235: .SH AUTHOR ! 2236: William Joy. ! 2237: Job control and directory stack features first implemented by J.E. Kulp of ! 2238: I.I.A.S.A, Laxenburg, Austria, ! 2239: with different syntax than that used now. File name completion ! 2240: code written by Ken Greer, HP Labs. ! 2241: .SH FILES ! 2242: .ta 1.75i ! 2243: .nf ! 2244: ~/.cshrc Read at beginning of execution by each shell. ! 2245: ~/.login Read by login shell, after `.cshrc' at login. ! 2246: ~/.logout Read by login shell, at logout. ! 2247: /bin/sh Standard shell, for shell scripts not starting with a `#'. ! 2248: /tmp/sh* Temporary file for `<<'. ! 2249: /etc/passwd Source of home directories for `~name'. ! 2250: .fi ! 2251: .SH LIMITATIONS ! 2252: Words can be no longer than 1024 characters. ! 2253: The system limits argument lists to 10240 characters. ! 2254: The number of arguments to a command which involves filename expansion ! 2255: is limited to 1/6'th the number of characters allowed in an argument list. ! 2256: Command substitutions may substitute no more characters than are ! 2257: allowed in an argument list. ! 2258: To detect looping, the shell restricts the number of ! 2259: .I alias ! 2260: substitutions on a single line to 20. ! 2261: .SH "SEE ALSO" ! 2262: sh(1), access(2), execve(2), fork(2), killpg(2), pipe(2), sigvec(2), ! 2263: umask(2), setrlimit(2), wait(2), tty(4), a.out(5), environ(7), ! 2264: `An introduction to the C shell' ! 2265: .SH BUGS ! 2266: When a command is restarted from a stop, ! 2267: the shell prints the directory it started in if this is different ! 2268: from the current directory; this can be misleading (i.e. wrong) ! 2269: as the job may have changed directories internally. ! 2270: .PP ! 2271: Shell builtin functions are not stoppable/restartable. ! 2272: Command sequences of the form `a ; b ; c' are also not handled gracefully ! 2273: when stopping is attempted. If you suspend `b', the shell will then ! 2274: immediately execute `c'. This is especially noticeable if this ! 2275: expansion results from an ! 2276: .I alias. ! 2277: It suffices to place the sequence of commands in ()'s to force it to ! 2278: a subshell, i.e. `( a ; b ; c )'. ! 2279: .PP ! 2280: Control over tty output after processes are started is primitive; ! 2281: perhaps this will inspire someone to work on a good virtual ! 2282: terminal interface. In a virtual terminal interface much more ! 2283: interesting things could be done with output control. ! 2284: .PP ! 2285: Alias substitution is most often used to clumsily simulate shell procedures; ! 2286: shell procedures should be provided rather than aliases. ! 2287: .PP ! 2288: Commands within loops, prompted for by `?', are not placed in the ! 2289: .I history ! 2290: list. ! 2291: Control structure should be parsed rather than being recognized as built-in ! 2292: commands. This would allow control commands to be placed anywhere, ! 2293: to be combined with `|', and to be used with `&' and `;' metasyntax. ! 2294: .PP ! 2295: It should be possible to use the `:' modifiers on the output of command ! 2296: substitutions. ! 2297: All and more than one `:' modifier should be allowed on `$' substitutions. ! 2298: .PP ! 2299: The way the ! 2300: .B filec ! 2301: facility is implemented is ugly and expensive.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.