| 1 | CSH(1) UNIX Reference Manual CSH(1) |
| 2 | |
| 3 | N\bNA\bAM\bME\bE |
| 4 | c\bcs\bsh\bh - a shell (command interpreter) with C-like syntax |
| 5 | |
| 6 | S\bSY\bYN\bNO\bOP\bPS\bSI\bIS\bS |
| 7 | c\bcs\bsh\bh [-\b-c\bce\bef\bf^\b^i\bin\bns\bst\btv\bvV\bVx\bxX\bX] [arg ...] |
| 8 | |
| 9 | D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN |
| 10 | The C\bCs\bsh\bh is a command language interpreter incorporating a history mechan- |
| 11 | ism (see H\bHi\bis\bst\bto\bor\bry\by S\bSu\bub\bbs\bst\bti\bit\btu\but\bti\bio\bon\bns\bs), job control facilities (see J\bJo\bob\bbs\bs), in- |
| 12 | teractive file name and user name completion (see F\bFi\bil\ble\be N\bNa\bam\bme\be C\bCo\bom\bmp\bpl\ble\bet\bti\bio\bon\bn), |
| 13 | and a C-like syntax. It is used both as an interactive login shell and a |
| 14 | shell script command processor. |
| 15 | |
| 16 | A\bAr\brg\bgu\bum\bme\ben\bnt\bt l\bli\bis\bst\bt p\bpr\bro\boc\bce\bes\bss\bsi\bin\bng\bg |
| 17 | If the first argument (argument 0) to the shell is `-\b-' then this is a |
| 18 | login shell. The flag arguments are interpreted as follows: |
| 19 | |
| 20 | -\b-b\bb This flag forces a ``break'' from option processing, causing any |
| 21 | further shell arguments to be treated as non-option arguments. The |
| 22 | remaining arguments will not be interpreted as shell options. This |
| 23 | may be used to pass options to a shell script without confusion or |
| 24 | possible subterfuge. The shell will not run a set-user ID script |
| 25 | without this option. |
| 26 | |
| 27 | -\b-c\bc Commands are read from the (single) following argument which must be |
| 28 | present. Any remaining arguments are placed in _\ba_\br_\bg_\bv. |
| 29 | |
| 30 | -\b-e\be The shell exits if any invoked command terminates abnormally or |
| 31 | yields a non-zero exit status. |
| 32 | |
| 33 | -\b-f\bf The shell will start faster, because it will neither search for nor |
| 34 | execute commands from the file ._\bc_\bs_\bh_\br_\bc in the invoker's home directo- |
| 35 | ry. |
| 36 | |
| 37 | -\b-i\bi The shell is interactive and prompts for its top-level input, even |
| 38 | if it appears to not be a terminal. Shells are interactive without |
| 39 | this option if their inputs and outputs are terminals. |
| 40 | |
| 41 | -\b-n\bn Commands are parsed, but not executed. This aids in syntactic |
| 42 | checking of shell scripts. |
| 43 | |
| 44 | -\b-s\bs Command input is taken from the standard input. |
| 45 | |
| 46 | -\b-t\bt A single line of input is read and executed. A `\' may be used to |
| 47 | escape the newline at the end of this line and continue onto another |
| 48 | line. |
| 49 | |
| 50 | -\b-v\bv Causes the _\bv_\be_\br_\bb_\bo_\bs_\be variable to be set, with the effect that command |
| 51 | input is echoed after history substitution. |
| 52 | |
| 53 | -\b-x\bx Causes the _\be_\bc_\bh_\bo variable to be set, so that commands are echoed im- |
| 54 | mediately before execution. |
| 55 | |
| 56 | -\b-V\bV Causes the _\bv_\be_\br_\bb_\bo_\bs_\be variable to be set even before ._\bc_\bs_\bh_\br_\bc _\bi_\bs |
| 57 | _\be_\bx_\be_\bc_\bu_\bt_\be_\bd. |
| 58 | |
| 59 | -\b-X\bX Is to -\b-x\bx as -\b-V\bV is to -\b-v\bv. |
| 60 | |
| 61 | After processing of flag arguments, if arguments remain but none of the |
| 62 | -\b-c\bc, -\b-i\bi, -\b-s\bs, or -\b-t\bt options were given, the first argument is taken as the |
| 63 | name of a file of commands to be executed. The shell opens this file, |
| 64 | and saves its name for possible resubstitution by `$0'. Since many sys- |
| 65 | tems use either the standard version 6 or version 7 shells whose shell |
| 66 | scripts are not compatible with this shell, the shell will execute such a |
| 67 | `standard' shell if the first character of a script is not a `#', i.e. if |
| 68 | the script does not start with a comment. Remaining arguments initialize |
| 69 | the variable _\ba_\br_\bg_\bv. |
| 70 | |
| 71 | An instance of c\bcs\bsh\bh begins by executing commands from the file |
| 72 | /_\be_\bt_\bc/_\bc_\bs_\bh._\bc_\bs_\bh_\br_\bc and, if this is a login shell, /_\be_\bt_\bc/_\bc_\bs_\bh._\bl_\bo_\bg_\bi_\bn. It then |
| 73 | executes commands from ._\bc_\bs_\bh_\br_\bc in the _\bh_\bo_\bm_\be directory of the invoker, and, |
| 74 | if this is a login shell, the file ._\bl_\bo_\bg_\bi_\bn in the same location. It is |
| 75 | typical for users on crt's to put the command ``stty crt'' in their |
| 76 | ._\bl_\bo_\bg_\bi_\bn file, and to also invoke tset(1) there. |
| 77 | |
| 78 | In the normal case, the shell will then begin reading commands from the |
| 79 | terminal, prompting with `% '. Processing of arguments and the use of |
| 80 | the shell to process files containing command scripts will be described |
| 81 | later. |
| 82 | |
| 83 | The shell then repeatedly performs the following actions: a line of com- |
| 84 | mand input is read and broken into _\bw_\bo_\br_\bd_\bs. This sequence of words is |
| 85 | placed on the command history list and then parsed. Finally each command |
| 86 | in the current line is executed. |
| 87 | |
| 88 | When a login shell terminates it executes commands from the files ._\bl_\bo_\bg_\bo_\bu_\bt |
| 89 | in the user's _\bh_\bo_\bm_\be directory and /_\be_\bt_\bc/_\bc_\bs_\bh._\bl_\bo_\bg_\bo_\bu_\bt. |
| 90 | |
| 91 | L\bLe\bex\bxi\bic\bca\bal\bl s\bst\btr\bru\buc\bct\btu\bur\bre\be |
| 92 | The shell splits input lines into words at blanks and tabs with the fol- |
| 93 | lowing exceptions. The characters `&' `|' `;' `<' `>' `(' `)' form |
| 94 | separate words. If doubled in `&&', `||', `<<' or `>>' these pairs form |
| 95 | single words. These parser metacharacters may be made part of other |
| 96 | words, or prevented their special meaning, by preceding them with `\'. A |
| 97 | newline preceded by a `\' is equivalent to a blank. |
| 98 | |
| 99 | In addition strings enclosed in matched pairs of quotations, `'', ``' or |
| 100 | `"', form parts of a word; metacharacters in these strings, including |
| 101 | blanks and tabs, do not form separate words. These quotations have se- |
| 102 | mantics to be described subsequently. Within pairs of `'' or `"' charac- |
| 103 | ters a newline preceded by a `\' gives a true newline character. |
| 104 | |
| 105 | When the shell's input is not a terminal, the character `#' introduces a |
| 106 | comment which continues to the end of the input line. It is prevented |
| 107 | this special meaning when preceded by `\' and in quotations using ``', |
| 108 | `'', and `"'. |
| 109 | |
| 110 | C\bCo\bom\bmm\bma\ban\bnd\bds\bs |
| 111 | A simple command is a sequence of words, the first of which specifies the |
| 112 | command to be executed. A simple command or a sequence of simple com- |
| 113 | mands separated by `|' characters forms a pipeline. The output of each |
| 114 | command in a pipeline is connected to the input of the next. Sequences |
| 115 | of pipelines may be separated by `;', and are then executed sequentially. |
| 116 | A sequence of pipelines may be executed without immediately waiting for |
| 117 | it to terminate by following it with an `&'. |
| 118 | |
| 119 | Any of the above may be placed in `(' `)' to form a simple command (which |
| 120 | may be a component of a pipeline, etc.) It is also possible to separate |
| 121 | pipelines with `||' or `&&' indicating, as in the C language, that the |
| 122 | second is to be executed only if the first fails or succeeds respective- |
| 123 | ly. (See _\bE_\bx_\bp_\br_\be_\bs_\bs_\bi_\bo_\bn_\bs.) |
| 124 | |
| 125 | J\bJo\bob\bbs\bs |
| 126 | The shell associates a _\bj_\bo_\bb with each pipeline. It keeps a table of |
| 127 | current jobs, printed by the _\bj_\bo_\bb_\bs command, and assigns them small integer |
| 128 | numbers. When a job is started asynchronously with `&', the shell prints |
| 129 | a line which looks like: |
| 130 | |
| 131 | [1] 1234 |
| 132 | |
| 133 | |
| 134 | indicating that the job which was started asynchronously was job number 1 |
| 135 | and had one (top-level) process, whose process id was 1234. |
| 136 | |
| 137 | If you are running a job and wish to do something else you may hit the |
| 138 | key ^\b^Z\bZ (control-Z) which sends a STOP signal to the current job. The |
| 139 | shell will then normally indicate that the job has been `Stopped', and |
| 140 | print another prompt. You can then manipulate the state of this job, |
| 141 | putting it in the background with the _\bb_\bg command, or run some other com- |
| 142 | mands and then eventually bring the job back into the foreground with the |
| 143 | foreground command _\bf_\bg. A ^\b^Z\bZ takes effect immediately and is like an in- |
| 144 | terrupt in that pending output and unread input are discarded when it is |
| 145 | typed. There is another special key ^\b^Y\bY which does not generate a STOP |
| 146 | signal until a program attempts to read(2) it. This can usefully be |
| 147 | typed ahead when you have prepared some commands for a job which you wish |
| 148 | to stop after it has read them. |
| 149 | |
| 150 | A job being run in the background will stop if it tries to read from the |
| 151 | terminal. Background jobs are normally allowed to produce output, but |
| 152 | this can be disabled by giving the command ``stty tostop''. If you set |
| 153 | this tty option, then background jobs will stop when they try to produce |
| 154 | output like they do when they try to read input. |
| 155 | |
| 156 | There are several ways to refer to jobs in the shell. The character `%' |
| 157 | introduces a job name. If you wish to refer to job number 1, you can |
| 158 | name it as `%1'. Just naming a job brings it to the foreground; thus |
| 159 | `%1' is a synonym for `fg %1', bringing job 1 back into the foreground. |
| 160 | Similarly saying `%1 &' resumes job 1 in the background. Jobs can also |
| 161 | be named by prefixes of the string typed in to start them, if these pre- |
| 162 | fixes are unambiguous, thus `%ex' would normally restart a suspended |
| 163 | ex(1) job, if there were only one suspended job whose name began with the |
| 164 | string `ex'. It is also possible to say `%?string' which specifies a job |
| 165 | whose text contains _\bs_\bt_\br_\bi_\bn_\bg, if there is only one such job. |
| 166 | |
| 167 | The shell maintains a notion of the current and previous jobs. In output |
| 168 | pertaining to jobs, the current job is marked with a `+' and the previous |
| 169 | job with a `-'. The abbreviation `%+' refers to the current job and `%-' |
| 170 | refers to the previous job. For close analogy with the syntax of the |
| 171 | _\bh_\bi_\bs_\bt_\bo_\br_\by mechanism (described below), `%%' is also a synonym for the |
| 172 | current job. |
| 173 | |
| 174 | The job control mechanism requires that the stty(1) option n\bne\bew\bw be set. It |
| 175 | is an artifact from a _\bn_\be_\bw implementation of the tty driver which allows |
| 176 | generation of interrupt characters from the keyboard to tell jobs to |
| 177 | stop. See stty(1) for details on setting options in the new tty driver. |
| 178 | |
| 179 | S\bSt\bta\bat\btu\bus\bs r\bre\bep\bpo\bor\brt\bti\bin\bng\bg |
| 180 | This shell learns immediately whenever a process changes state. It nor- |
| 181 | mally informs you whenever a job becomes blocked so that no further pro- |
| 182 | gress is possible, but only just before it prints a prompt. This is done |
| 183 | so that it does not otherwise disturb your work. If, however, you set |
| 184 | the shell variable _\bn_\bo_\bt_\bi_\bf_\by, the shell will notify you immediately of |
| 185 | changes of status in background jobs. There is also a shell command |
| 186 | _\bn_\bo_\bt_\bi_\bf_\by which marks a single process so that its status changes will be |
| 187 | immediately reported. By default _\bn_\bo_\bt_\bi_\bf_\by marks the current process; sim- |
| 188 | ply say `notify' after starting a background job to mark it. |
| 189 | |
| 190 | When you try to leave the shell while jobs are stopped, you will be |
| 191 | warned that `You have stopped jobs.' You may use the _\bj_\bo_\bb_\bs command to see |
| 192 | what they are. If you do this or immediately try to exit again, the |
| 193 | shell will not warn you a second time, and the suspended jobs will be |
| 194 | terminated. |
| 195 | |
| 196 | F\bFi\bil\ble\be N\bNa\bam\bme\be C\bCo\bom\bmp\bpl\ble\bet\bti\bio\bon\bn |
| 197 | When the file name completion feature is enabled by setting the shell |
| 198 | variable _\bf_\bi_\bl_\be_\bc (see s\bse\bet\bt), c\bcs\bsh\bh will interactively complete file names and |
| 199 | user names from unique prefixes, when they are input from the terminal |
| 200 | followed by the escape character (the escape key, or control-[) For exam- |
| 201 | ple, if the current directory looks like |
| 202 | |
| 203 | DSC.OLD bin cmd lib xmpl.c |
| 204 | DSC.NEW chaosnet cmtest mail xmpl.o |
| 205 | bench class dev mbox xmpl.out |
| 206 | |
| 207 | and the input is |
| 208 | |
| 209 | % vi ch<escape> |
| 210 | |
| 211 | c\bcs\bsh\bh will complete the prefix ``ch'' to the only matching file name |
| 212 | ``chaosnet'', changing the input line to |
| 213 | |
| 214 | % vi chaosnet |
| 215 | |
| 216 | However, given |
| 217 | |
| 218 | % vi D<escape> |
| 219 | |
| 220 | c\bcs\bsh\bh will only expand the input to |
| 221 | |
| 222 | % vi DSC. |
| 223 | |
| 224 | and will sound the terminal bell to indicate that the expansion is incom- |
| 225 | plete, since there are two file names matching the prefix ``D''. |
| 226 | |
| 227 | If a partial file name is followed by the end-of-file character (usually |
| 228 | control-D), then, instead of completing the name, c\bcs\bsh\bh will list all file |
| 229 | names matching the prefix. For example, the input |
| 230 | |
| 231 | % vi D<control-D> |
| 232 | |
| 233 | causes all files beginning with ``D'' to be listed: |
| 234 | |
| 235 | DSC.NEW DSC.OLD |
| 236 | |
| 237 | while the input line remains unchanged. |
| 238 | |
| 239 | The same system of escape and end-of-file can also be used to expand par- |
| 240 | tial user names, if the word to be completed (or listed) begins with the |
| 241 | character ``~''. For example, typing |
| 242 | |
| 243 | cd ~ro<escape> |
| 244 | |
| 245 | may produce the expansion |
| 246 | |
| 247 | cd ~root |
| 248 | |
| 249 | The use of the terminal bell to signal errors or multiple matches can be |
| 250 | inhibited by setting the variable _\bn_\bo_\bb_\be_\be_\bp. |
| 251 | |
| 252 | Normally, all files in the particular directory are candidates for name |
| 253 | completion. Files with certain suffixes can be excluded from considera- |
| 254 | tion by setting the variable _\bf_\bi_\bg_\bn_\bo_\br_\be to the list of suffixes to be ig- |
| 255 | nored. Thus, if _\bf_\bi_\bg_\bn_\bo_\br_\be is set by the command |
| 256 | |
| 257 | % set fignore = (.o .out) |
| 258 | |
| 259 | then typing |
| 260 | |
| 261 | % vi x<escape> |
| 262 | |
| 263 | would result in the completion to |
| 264 | |
| 265 | |
| 266 | % vi xmpl.c |
| 267 | |
| 268 | ignoring the files "xmpl.o" and "xmpl.out". However, if the only comple- |
| 269 | tion possible requires not ignoring these suffixes, then they are not ig- |
| 270 | nored. In addition, _\bf_\bi_\bg_\bn_\bo_\br_\be does not affect the listing of file names by |
| 271 | control-D. All files are listed regardless of their suffixes. |
| 272 | |
| 273 | S\bSu\bub\bbs\bst\bti\bit\btu\but\bti\bio\bon\bns\bs |
| 274 | We now describe the various transformations the shell performs on the in- |
| 275 | put in the order in which they occur. |
| 276 | |
| 277 | H\bHi\bis\bst\bto\bor\bry\by s\bsu\bub\bbs\bst\bti\bit\btu\but\bti\bio\bon\bns\bs |
| 278 | History substitutions place words from previous command input as portions |
| 279 | of new commands, making it easy to repeat commands, repeat arguments of a |
| 280 | previous command in the current command, or fix spelling mistakes in the |
| 281 | previous command with little typing and a high degree of confidence. |
| 282 | History substitutions begin with the character `!' and may begin _\ba_\bn_\by_\bw_\bh_\be_\br_\be |
| 283 | in the input stream (with the proviso that they d\bdo\bo n\bno\bot\bt nest.) This `!' |
| 284 | may be preceded by an `\' to prevent its special meaning; for conveni- |
| 285 | ence, a `!' is passed unchanged when it is followed by a blank, tab, new- |
| 286 | line, `=' or `('. (History substitutions also occur when an input line |
| 287 | begins with `^'. This special abbreviation will be described later.) Any |
| 288 | input line which contains history substitution is echoed on the terminal |
| 289 | before it is executed as it could have been typed without history substi- |
| 290 | tution. |
| 291 | |
| 292 | Commands input from the terminal which consist of one or more words are |
| 293 | saved on the history list. The history substitutions reintroduce se- |
| 294 | quences of words from these saved commands into the input stream. The |
| 295 | size of which is controlled by the _\bh_\bi_\bs_\bt_\bo_\br_\by variable; the previous command |
| 296 | is always retained, regardless of its value. Commands are numbered |
| 297 | sequentially from 1. |
| 298 | |
| 299 | For definiteness, consider the following output from the _\bh_\bi_\bs_\bt_\bo_\br_\by command: |
| 300 | |
| 301 | 9 write michael |
| 302 | 10 ex write.c |
| 303 | 11 cat oldwrite.c |
| 304 | 12 diff *write.c |
| 305 | |
| 306 | The commands are shown with their event numbers. It is not usually |
| 307 | necessary to use event numbers, but the current event number can be made |
| 308 | part of the _\bp_\br_\bo_\bm_\bp_\bt by placing an `!' in the prompt string. |
| 309 | |
| 310 | With the current event 13 we can refer to previous events by event number |
| 311 | `!11', relatively as in `!-2' (referring to the same event), by a prefix |
| 312 | of a command word as in `!d' for event 12 or `!wri' for event 9, or by a |
| 313 | string contained in a word in the command as in `!?mic?' also referring |
| 314 | to event 9. These forms, without further modification, simply reintro- |
| 315 | duce the words of the specified events, each separated by a single blank. |
| 316 | As a special case `!!' refers to the previous command; thus `!!' alone is |
| 317 | essentially a _\br_\be_\bd_\bo. |
| 318 | |
| 319 | To select words from an event we can follow the event specification by a |
| 320 | `:' and a designator for the desired words. The words of an input line |
| 321 | are numbered from 0, the first (usually command) word being 0, the second |
| 322 | word (first argument) being 1, etc. The basic word designators are: |
| 323 | |
| 324 | 0 first (command) word |
| 325 | _\bn _\bn'th argument |
| 326 | ^ first argument, i.e. `1' |
| 327 | $ last argument |
| 328 | % word matched by (immediately preceding) ?_\bs? search |
| 329 | _\bx-_\by range of words |
| 330 | -_\by abbreviates `_\b0-_\by' |
| 331 | * abbreviates `^-$', or nothing if only 1 word in event |
| 332 | _\bx* abbreviates `_\bx-$' |
| 333 | _\bx- like `_\bx*' but omitting word `$' |
| 334 | |
| 335 | |
| 336 | The `:' separating the event specification from the word designator can |
| 337 | be omitted if the argument selector begins with a `^', `$', `*' `-' or |
| 338 | `%'. After the optional word designator can be placed a sequence of |
| 339 | modifiers, each preceded by a `:'. The following modifiers are defined: |
| 340 | |
| 341 | h Remove a trailing pathname component, leaving the head. |
| 342 | r Remove a trailing `.xxx' component, leaving the root name. |
| 343 | e Remove all but the extension `.xxx' part. |
| 344 | s/_\bl/_\br/ |
| 345 | Substitute _\bl for _\br |
| 346 | t Remove all leading pathname components, leaving the tail. |
| 347 | & Repeat the previous substitution. |
| 348 | g Apply the change globally, prefixing the above, e.g. `g&'. |
| 349 | p Print the new command line but do not execute it. |
| 350 | q Quote the substituted words, preventing further substitu- |
| 351 | tions. |
| 352 | x Like q, but break into words at blanks, tabs and newlines. |
| 353 | |
| 354 | |
| 355 | Unless preceded by a `g' the modification is applied only to the first |
| 356 | modifiable word. With substitutions, it is an error for no word to be |
| 357 | applicable. |
| 358 | |
| 359 | The left hand side of substitutions are not regular expressions in the |
| 360 | sense of the editors, but rather strings. Any character may be used as |
| 361 | the delimiter in place of `/'; a `\' quotes the delimiter into the _\bl and |
| 362 | _\br strings. The character `&' in the right hand side is replaced by the |
| 363 | text from the left. A `\' quotes `&' also. A null _\bl uses the previous |
| 364 | string either from a _\bl or from a contextual scan string _\bs in `!? _\bs ?'. |
| 365 | The trailing delimiter in the substitution may be omitted if a newline |
| 366 | follows immediately as may the trailing `?' in a contextual scan. |
| 367 | |
| 368 | A history reference may be given without an event specification, e.g. |
| 369 | `!$'. In this case the reference is to the previous command unless a |
| 370 | previous history reference occurred on the same line in which case this |
| 371 | form repeats the previous reference. Thus `!?foo?^ !$' gives the first |
| 372 | and last arguments from the command matching `?foo?'. |
| 373 | |
| 374 | A special abbreviation of a history reference occurs when the first non- |
| 375 | blank character of an input line is a `^'. This is equivalent to `!:s^' |
| 376 | providing a convenient shorthand for substitutions on the text of the |
| 377 | previous line. Thus `^lb^lib' fixes the spelling of `lib' in the previ- |
| 378 | ous command. Finally, a history substitution may be surrounded with `{' |
| 379 | and `}' if necessary to insulate it from the characters which follow. |
| 380 | Thus, after `ls -ld ~paul' we might do `!{l}a' to do `ls -ld ~paula', |
| 381 | while `!la' would look for a command starting `la'. |
| 382 | |
| 383 | Q\bQu\buo\bot\bta\bat\bti\bio\bon\bns\bs w\bwi\bit\bth\bh '\b' a\ban\bnd\bd "\b" |
| 384 | The quotation of strings by `'' and `"' can be used to prevent all or |
| 385 | some of the remaining substitutions. Strings enclosed in `'' are |
| 386 | prevented any further interpretation. Strings enclosed in `"' may be ex- |
| 387 | panded as described below. |
| 388 | |
| 389 | In both cases the resulting text becomes (all or part of) a single word; |
| 390 | only in one special case (see _\bC_\bo_\bm_\bm_\ba_\bn_\bd _\bS_\bu_\bb_\bs_\bt_\bi_\bt_\bi_\bt_\bi_\bo_\bn below) does a `"' |
| 391 | quoted string yield parts of more than one word; `'' quoted strings never |
| 392 | do. |
| 393 | |
| 394 | A\bAl\bli\bia\bas\bs s\bsu\bub\bbs\bst\bti\bit\btu\but\bti\bio\bon\bn |
| 395 | The shell maintains a list of aliases which can be established, displayed |
| 396 | and modified by the _\ba_\bl_\bi_\ba_\bs and _\bu_\bn_\ba_\bl_\bi_\ba_\bs commands. After a command line is |
| 397 | scanned, it is parsed into distinct commands and the first word of each |
| 398 | command, left-to-right, is checked to see if it has an alias. If it |
| 399 | does, then the text which is the alias for that command is reread with |
| 400 | the history mechanism available as though that command were the previous |
| 401 | input line. The resulting words replace the command and argument list. |
| 402 | If no reference is made to the history list, then the argument list is |
| 403 | left unchanged. |
| 404 | |
| 405 | Thus if the alias for `ls' is `ls -l' the command `ls /usr' would map to |
| 406 | `ls -l /usr', the argument list here being undisturbed. Similarly if the |
| 407 | alias for `lookup' was `grep !^ /etc/passwd' then `lookup bill' would map |
| 408 | to `grep bill /etc/passwd'. |
| 409 | |
| 410 | If an alias is found, the word transformation of the input text is per- |
| 411 | formed and the aliasing process begins again on the reformed input line. |
| 412 | Looping is prevented if the first word of the new text is the same as the |
| 413 | old by flagging it to prevent further aliasing. Other loops are detected |
| 414 | and cause an error. |
| 415 | |
| 416 | Note that the mechanism allows aliases to introduce parser metasyntax. |
| 417 | Thus we can `alias print 'pr \!* | lpr'' to make a command which _\bp_\br '_\bs |
| 418 | its arguments to the line printer. |
| 419 | |
| 420 | V\bVa\bar\bri\bia\bab\bbl\ble\be s\bsu\bub\bbs\bst\bti\bit\btu\but\bti\bio\bon\bn |
| 421 | The shell maintains a set of variables, each of which has as value a list |
| 422 | of zero or more words. Some of these variables are set by the shell or |
| 423 | referred to by it. For instance, the _\ba_\br_\bg_\bv variable is an image of the |
| 424 | shell's argument list, and words of this variable's value are referred to |
| 425 | in special ways. |
| 426 | |
| 427 | The values of variables may be displayed and changed by using the _\bs_\be_\bt and |
| 428 | _\bu_\bn_\bs_\be_\bt commands. Of the variables referred to by the shell a number are |
| 429 | toggles; the shell does not care what their value is, only whether they |
| 430 | are set or not. For instance, the _\bv_\be_\br_\bb_\bo_\bs_\be variable is a toggle which |
| 431 | causes command input to be echoed. The setting of this variable results |
| 432 | from the -\b-v\bv command line option. |
| 433 | |
| 434 | Other operations treat variables numerically. The `@' command permits |
| 435 | numeric calculations to be performed and the result assigned to a vari- |
| 436 | able. Variable values are, however, always represented as (zero or more) |
| 437 | strings. For the purposes of numeric operations, the null string is con- |
| 438 | sidered to be zero, and the second and subsequent words of multiword |
| 439 | values are ignored. |
| 440 | |
| 441 | After the input line is aliased and parsed, and before each command is |
| 442 | executed, variable substitution is performed keyed by `$' characters. |
| 443 | This expansion can be prevented by preceding the `$' with a `\' except |
| 444 | within `"'s where it _\ba_\bl_\bw_\ba_\by_\bs occurs, and within `''s where it _\bn_\be_\bv_\be_\br oc- |
| 445 | curs. Strings quoted by ``' are interpreted later (see C\bCo\bom\bmm\bma\ban\bnd\bd |
| 446 | s\bsu\bub\bbs\bst\bti\bit\btu\but\bti\bio\bon\bn below) so `$' substitution does not occur there until later, |
| 447 | if at all. A `$' is passed unchanged if followed by a blank, tab, or |
| 448 | end-of-line. |
| 449 | |
| 450 | Input/output redirections are recognized before variable expansion, and |
| 451 | are variable expanded separately. Otherwise, the command name and entire |
| 452 | argument list are expanded together. It is thus possible for the first |
| 453 | (command) word to this point to generate more than one word, the first of |
| 454 | which becomes the command name, and the rest of which become arguments. |
| 455 | |
| 456 | Unless enclosed in `"' or given the `:q' modifier the results of variable |
| 457 | substitution may eventually be command and filename substituted. Within |
| 458 | `"', a variable whose value consists of multiple words expands to a (por- |
| 459 | tion of) a single word, with the words of the variables value separated |
| 460 | by blanks. When the `:q' modifier is applied to a substitution the vari- |
| 461 | able will expand to multiple words with each word separated by a blank |
| 462 | and quoted to prevent later command or filename substitution. |
| 463 | |
| 464 | The following metasequences are provided for introducing variable values |
| 465 | into the shell input. Except as noted, it is an error to reference a |
| 466 | variable which is not set. |
| 467 | |
| 468 | $name |
| 469 | ${name} |
| 470 | Are replaced by the words of the value of variable _\bn_\ba_\bm_\be, each |
| 471 | separated by a blank. Braces insulate _\bn_\ba_\bm_\be from following charac- |
| 472 | ters which would otherwise be part of it. Shell variables have |
| 473 | names consisting of up to 20 letters and digits starting with a |
| 474 | letter. The underscore character is considered a letter. |
| 475 | If _\bn_\ba_\bm_\be is not a shell variable, but is set in the environment, |
| 476 | then that value is returned (but : modifiers and the other forms |
| 477 | given below are not available in this case). |
| 478 | |
| 479 | $name[selector] |
| 480 | ${name[selector]} |
| 481 | May be used to select only some of the words from the value of |
| 482 | _\bn_\ba_\bm_\be. The selector is subjected to `$' substitution and may con- |
| 483 | sist of a single number or two numbers separated by a `-'. The |
| 484 | first word of a variables value is numbered `1'. If the first |
| 485 | number of a range is omitted it defaults to `1'. If the last |
| 486 | member of a range is omitted it defaults to `$#name'. The selector |
| 487 | `*' selects all words. It is not an error for a range to be empty |
| 488 | if the second argument is omitted or in range. |
| 489 | |
| 490 | $#name |
| 491 | ${#name} |
| 492 | Gives the number of words in the variable. This is useful for |
| 493 | later use in a `$argv[selector]'. |
| 494 | |
| 495 | $0 Substitutes the name of the file from which command input is being |
| 496 | read. An error occurs if the name is not known. |
| 497 | |
| 498 | $number |
| 499 | ${number} |
| 500 | Equivalent to `$argv[number]'. |
| 501 | |
| 502 | $* Equivalent to `$argv[*]'. The modifiers `:e', `:h', `:t', `:r', |
| 503 | `:q' and `:x' may be applied to the substitutions above as may |
| 504 | `:gh', `:gt' and `:gr'. If braces `{' '}' appear in the command |
| 505 | form then the modifiers must appear within the braces. The current |
| 506 | implementation allows only one `:' modifier on each `$' expansion. |
| 507 | |
| 508 | |
| 509 | The following substitutions may not be modified with `:' modifiers. |
| 510 | |
| 511 | $?name |
| 512 | ${?name} |
| 513 | Substitutes the string `1' if name is set, `0' if it is not. |
| 514 | |
| 515 | $?0 Substitutes `1' if the current input filename is known, `0' if it |
| 516 | is not. |
| 517 | |
| 518 | $$ Substitute the (decimal) process number of the (parent) shell. |
| 519 | |
| 520 | $< Substitutes a line from the standard input, with no further |
| 521 | interpretation thereafter. It can be used to read from the |
| 522 | keyboard in a shell script. |
| 523 | |
| 524 | |
| 525 | C\bCo\bom\bmm\bma\ban\bnd\bd a\ban\bnd\bd f\bfi\bil\ble\ben\bna\bam\bme\be s\bsu\bub\bbs\bst\bti\bit\btu\but\bti\bio\bon\bn |
| 526 | The remaining substitutions, command and filename substitution, are |
| 527 | applied selectively to the arguments of builtin commands. This means |
| 528 | that portions of expressions which are not evaluated are not subjected to |
| 529 | these expansions. For commands which are not internal to the shell, the |
| 530 | command name is substituted separately from the argument list. This |
| 531 | occurs very late, after input-output redirection is performed, and in a |
| 532 | child of the main shell. |
| 533 | |
| 534 | C\bCo\bom\bmm\bma\ban\bnd\bd s\bsu\bub\bbs\bst\bti\bit\btu\but\bti\bio\bon\bn |
| 535 | Command substitution is indicated by a command enclosed in ``'. The |
| 536 | output from such a command is normally broken into separate words at |
| 537 | blanks, tabs and newlines, with null words being discarded, this text |
| 538 | then replacing the original string. Within `"'s, only newlines force new |
| 539 | words; blanks and tabs are preserved. |
| 540 | |
| 541 | In any case, the single final newline does not force a new word. Note |
| 542 | that it is thus possible for a command substitution to yield only part of |
| 543 | a word, even if the command outputs a complete line. |
| 544 | |
| 545 | F\bFi\bil\ble\ben\bna\bam\bme\be s\bsu\bub\bbs\bst\bti\bit\btu\but\bti\bio\bon\bn |
| 546 | If a word contains any of the characters `*', `?', `[' or `{' or begins |
| 547 | with the character `~', then that word is a candidate for filename |
| 548 | substitution, also known as `globbing'. This word is then regarded as a |
| 549 | pattern, and replaced with an alphabetically sorted list of file names |
| 550 | which match the pattern. In a list of words specifying filename |
| 551 | substitution it is an error for no pattern to match an existing file |
| 552 | name, but it is not required for each pattern to match. Only the |
| 553 | metacharacters `*', `?' and `[' imply pattern matching, the characters |
| 554 | `~' and `{' being more akin to abbreviations. |
| 555 | |
| 556 | In matching filenames, the character `.' at the beginning of a filename |
| 557 | or immediately following a `/', as well as the character `/' must be |
| 558 | matched explicitly. The character `*' matches any string of characters, |
| 559 | including the null string. The character `?' matches any single |
| 560 | character. The sequence `[...]' matches any one of the characters |
| 561 | enclosed. Within `[...]', a pair of characters separated by `-' matches |
| 562 | any character lexically between the two. |
| 563 | |
| 564 | The character `~' at the beginning of a filename is used to refer to home |
| 565 | directories. Standing alone, i.e. `~' it expands to the invokers home |
| 566 | directory as reflected in the value of the variable _\bh_\bo_\bm_\be. When followed |
| 567 | by a name consisting of letters, digits and `-' characters the shell |
| 568 | searches for a user with that name and substitutes their home directory; |
| 569 | thus `~ken' might expand to `/usr/ken' and `~ken/chmach' to |
| 570 | `/usr/ken/chmach'. If the character `~' is followed by a character other |
| 571 | than a letter or `/' or appears not at the beginning of a word, it is |
| 572 | left undisturbed. |
| 573 | |
| 574 | The metanotation `a{b,c,d}e' is a shorthand for `abe ace ade'. Left to |
| 575 | right order is preserved, with results of matches being sorted separately |
| 576 | at a low level to preserve this order. This construct may be nested. |
| 577 | Thus `~source/s1/{oldls,ls}.c' expands to `/usr/source/s1/oldls.c |
| 578 | /usr/source/s1/ls.c' whether or not these files exist without any chance |
| 579 | of error if the home directory for `source' is `/usr/source'. Similarly |
| 580 | `../{memo,*box}' might expand to `../memo ../box ../mbox'. (Note that |
| 581 | `memo' was not sorted with the results of matching `*box'.) As a special |
| 582 | case `{', `}' and `{}' are passed undisturbed. |
| 583 | |
| 584 | I\bIn\bnp\bpu\but\bt/\b/o\bou\but\btp\bpu\but\bt |
| 585 | The standard input and standard output of a command may be redirected |
| 586 | with the following syntax: |
| 587 | |
| 588 | < name |
| 589 | Open file _\bn_\ba_\bm_\be (which is first variable, command and filename ex- |
| 590 | panded) as the standard input. |
| 591 | |
| 592 | << word |
| 593 | Read the shell input up to a line which is identical to _\bw_\bo_\br_\bd. _\bW_\bo_\br_\bd |
| 594 | is not subjected to variable, filename or command substitution, and |
| 595 | each input line is compared to _\bw_\bo_\br_\bd before any substitutions are |
| 596 | done on this input line. Unless a quoting `\', `"', `'' or ``' ap- |
| 597 | pears in _\bw_\bo_\br_\bd variable and command substitution is performed on the |
| 598 | intervening lines, allowing `\' to quote `$', `\' and ``'. Com- |
| 599 | mands which are substituted have all blanks, tabs, and newlines |
| 600 | preserved, except for the final newline which is dropped. The |
| 601 | resultant text is placed in an anonymous temporary file which is |
| 602 | given to the command as standard input. |
| 603 | |
| 604 | > name |
| 605 | >! name |
| 606 | >& name |
| 607 | >&! name |
| 608 | The file _\bn_\ba_\bm_\be is used as standard output. If the file does not ex- |
| 609 | ist then it is created; if the file exists, its is truncated, its |
| 610 | previous contents being lost. |
| 611 | |
| 612 | If the variable _\bn_\bo_\bc_\bl_\bo_\bb_\bb_\be_\br is set, then the file must not exist or |
| 613 | be a character special file (e.g. a terminal or `/dev/null') or an |
| 614 | error results. This helps prevent accidental destruction of files. |
| 615 | In this case the `!' forms can be used and suppress this check. |
| 616 | |
| 617 | The forms involving `&' route the diagnostic output into the speci- |
| 618 | fied file as well as the standard output. _\bN_\ba_\bm_\be is expanded in the |
| 619 | same way as `<' input filenames are. |
| 620 | |
| 621 | >> name |
| 622 | >>& name |
| 623 | >>! name |
| 624 | >>&! name |
| 625 | Uses file _\bn_\ba_\bm_\be as standard output like `>' but places output at the |
| 626 | end of the file. If the variable _\bn_\bo_\bc_\bl_\bo_\bb_\bb_\be_\br is set, then it is an |
| 627 | error for the file not to exist unless one of the `!' forms is |
| 628 | given. Otherwise similar to `>'. |
| 629 | |
| 630 | |
| 631 | A command receives the environment in which the shell was invoked as |
| 632 | modified by the input-output parameters and the presence of the command |
| 633 | in a pipeline. Thus, unlike some previous shells, commands run from a |
| 634 | file of shell commands have no access to the text of the commands by de- |
| 635 | fault; rather they receive the original standard input of the shell. The |
| 636 | `<<' mechanism should be used to present inline data. This permits shell |
| 637 | command scripts to function as components of pipelines and allows the |
| 638 | shell to block read its input. Note that the default standard input for |
| 639 | a command run detached is _\bn_\bo_\bt modified to be the empty file /_\bd_\be_\bv/_\bn_\bu_\bl_\bl; |
| 640 | rather the standard input remains as the original standard input of the |
| 641 | shell. If this is a terminal and if the process attempts to read from |
| 642 | the terminal, then the process will block and the user will be notified |
| 643 | (see _\bJ_\bo_\bb_\bs above). |
| 644 | |
| 645 | Diagnostic output may be directed through a pipe with the standard out- |
| 646 | put. Simply use the form `|&' rather than just `|'. |
| 647 | |
| 648 | E\bEx\bxp\bpr\bre\bes\bss\bsi\bio\bon\bns\bs |
| 649 | A number of the builtin commands (to be described subsequently) take ex- |
| 650 | pressions, in which the operators are similar to those of C, with the |
| 651 | same precedence. These expressions appear in the @\b@,\b, _\be_\bx_\bi_\bt, _\bi_\bf, and _\bw_\bh_\bi_\bl_\be |
| 652 | commands. The following operators are available: |
| 653 | |
| 654 | || && | *(ua & == != =~ !~ <= >= < > |
| 655 | << >> + - * / % ! ~ ( ) |
| 656 | |
| 657 | Here the precedence increases to the right, `==' `!=' `=~' and `!~', `<=' |
| 658 | `>=' `<' and `>', `<<' and `>>', `+' and `-', `*' `/' and `%' being, in |
| 659 | groups, at the same level. The `==' `!=' `=~' and `!~' operators compare |
| 660 | their arguments as strings; all others operate on numbers. The operators |
| 661 | `=~' and `!~' are like `!=' and `==' except that the right hand side is a |
| 662 | _\bp_\ba_\bt_\bt_\be_\br_\bn (containing, e.g. `*'s, `?'s and instances of `[...]') against |
| 663 | which the left hand operand is matched. This reduces the need for use of |
| 664 | the _\bs_\bw_\bi_\bt_\bc_\bh statement in shell scripts when all that is really needed is |
| 665 | pattern matching. |
| 666 | |
| 667 | Strings which begin with `0' are considered octal numbers. Null or miss- |
| 668 | ing arguments are considered `0'. The result of all expressions are |
| 669 | strings, which represent decimal numbers. It is important to note that |
| 670 | no two components of an expression can appear in the same word; except |
| 671 | when adjacent to components of expressions which are syntactically signi- |
| 672 | ficant to the parser (`&' `|' `<' `>' `(' `)') they should be surrounded |
| 673 | by spaces. |
| 674 | |
| 675 | Also available in expressions as primitive operands are command execu- |
| 676 | tions enclosed in `{' and `}' and file enquiries of the form -\b-l\bl _\bn_\ba_\bm_\be |
| 677 | where l\bl is one of: |
| 678 | |
| 679 | r read access |
| 680 | w write access |
| 681 | x execute access |
| 682 | e existence |
| 683 | o ownership |
| 684 | z zero size |
| 685 | f plain file |
| 686 | d directory |
| 687 | |
| 688 | The specified name is command and filename expanded and then tested to |
| 689 | see if it has the specified relationship to the real user. If the file |
| 690 | does not exist or is inaccessible then all enquiries return false, i.e. |
| 691 | `0'. Command executions succeed, returning true, i.e. `1', if the com- |
| 692 | mand exits with status 0, otherwise they fail, returning false, i.e. `0'. |
| 693 | If more detailed status information is required then the command should |
| 694 | be executed outside of an expression and the variable _\bs_\bt_\ba_\bt_\bu_\bs examined. |
| 695 | |
| 696 | C\bCo\bon\bnt\btr\bro\bol\bl f\bfl\blo\bow\bw |
| 697 | The shell contains a number of commands which can be used to regulate the |
| 698 | flow of control in command files (shell scripts) and (in limited but use- |
| 699 | ful ways) from terminal input. These commands all operate by forcing the |
| 700 | shell to reread or skip in its input and, due to the implementation, res- |
| 701 | trict the placement of some of the commands. |
| 702 | |
| 703 | The f\bfo\bor\bre\bea\bac\bch\bh, s\bsw\bwi\bit\btc\bch\bh, and w\bwh\bhi\bil\ble\be statements, as well as the i\bif\bf-\b-t\bth\bhe\ben\bn-\b-e\bel\bls\bse\be |
| 704 | form of the i\bif\bf statement require that the major keywords appear in a sin- |
| 705 | gle simple command on an input line as shown below. |
| 706 | |
| 707 | If the shell's input is not seekable, the shell buffers up input whenever |
| 708 | a loop is being read and performs seeks in this internal buffer to accom- |
| 709 | plish the rereading implied by the loop. (To the extent that this al- |
| 710 | lows, backward goto's will succeed on non-seekable inputs.) |
| 711 | |
| 712 | B\bBu\bui\bil\blt\bti\bin\bn c\bco\bom\bmm\bma\ban\bnd\bds\bs |
| 713 | Builtin commands are executed within the shell. If a builtin command oc- |
| 714 | curs as any component of a pipeline except the last then it is executed |
| 715 | in a subshell. |
| 716 | |
| 717 | a\bal\bli\bia\bas\bs |
| 718 | a\bal\bli\bia\bas\bs _\bn_\ba_\bm_\be |
| 719 | a\bal\bli\bia\bas\bs _\bn_\ba_\bm_\be _\bw_\bo_\br_\bd_\bl_\bi_\bs_\bt |
| 720 | The first form prints all aliases. The second form prints the |
| 721 | alias for name. The final form assigns the specified _\bw_\bo_\br_\bd_\bl_\bi_\bs_\bt as |
| 722 | the alias of _\bn_\ba_\bm_\be; _\bw_\bo_\br_\bd_\bl_\bi_\bs_\bt is command and filename substituted. |
| 723 | _\bN_\ba_\bm_\be is not allowed to be _\ba_\bl_\bi_\ba_\bs or _\bu_\bn_\ba_\bl_\bi_\ba_\bs. |
| 724 | |
| 725 | a\bal\bll\blo\boc\bc |
| 726 | Shows the amount of dynamic memory acquired, broken down into used |
| 727 | and free memory. With an argument shows the number of free and |
| 728 | used blocks in each size category. The categories start at size 8 |
| 729 | and double at each step. This command's output may vary across |
| 730 | system types, since systems other than the VAX may use a different |
| 731 | memory allocator. |
| 732 | |
| 733 | b\bbg\bg |
| 734 | b\bbg\bg %\b%_\bj_\bo_\bb ... |
| 735 | Puts the current or specified jobs into the background, continuing |
| 736 | them if they were stopped. |
| 737 | |
| 738 | b\bbr\bre\bea\bak\bk |
| 739 | Causes execution to resume after the e\ben\bnd\bd of the nearest enclosing |
| 740 | f\bfo\bor\bre\bea\bac\bch\bh or w\bwh\bhi\bil\ble\be. The remaining commands on the current line are |
| 741 | executed. Multi-level breaks are thus possible by writing them all |
| 742 | on one line. |
| 743 | |
| 744 | b\bbr\bre\bea\bak\bks\bsw\bw |
| 745 | Causes a break from a s\bsw\bwi\bit\btc\bch\bh, resuming after the e\ben\bnd\bds\bsw\bw. |
| 746 | |
| 747 | c\bca\bas\bse\be _\bl_\ba_\bb_\be_\bl: |
| 748 | A label in a s\bsw\bwi\bit\btc\bch\bh statement as discussed below. |
| 749 | |
| 750 | c\bcd\bd |
| 751 | c\bcd\bd _\bn_\ba_\bm_\be |
| 752 | c\bch\bhd\bdi\bir\br |
| 753 | c\bch\bhd\bdi\bir\br _\bn_\ba_\bm_\be |
| 754 | Change the shell's working directory to directory _\bn_\ba_\bm_\be. If no ar- |
| 755 | gument is given then change to the home directory of the user. If |
| 756 | _\bn_\ba_\bm_\be is not found as a subdirectory of the current directory (and |
| 757 | does not begin with `/', `./' or `../'), then each component of the |
| 758 | variable c\bcd\bdp\bpa\bat\bth\bh is checked to see if it has a subdirectory _\bn_\ba_\bm_\be. |
| 759 | Finally, if all else fails but _\bn_\ba_\bm_\be is a shell variable whose value |
| 760 | begins with `/', then this is tried to see if it is a directory. |
| 761 | |
| 762 | c\bco\bon\bnt\bti\bin\bnu\bue\be |
| 763 | Continue execution of the nearest enclosing w\bwh\bhi\bil\ble\be or f\bfo\bor\bre\bea\bac\bch\bh. The |
| 764 | rest of the commands on the current line are executed. |
| 765 | |
| 766 | d\bde\bef\bfa\bau\bul\blt\bt: |
| 767 | Labels the default case in a s\bsw\bwi\bit\btc\bch\bh statement. The default should |
| 768 | come after all c\bca\bas\bse\be labels. |
| 769 | |
| 770 | d\bdi\bir\brs\bs |
| 771 | Prints the directory stack; the top of the stack is at the left, |
| 772 | the first directory in the stack being the current directory. |
| 773 | |
| 774 | e\bec\bch\bho\bo _\bw_\bo_\br_\bd_\bl_\bi_\bs_\bt |
| 775 | e\bec\bch\bho\bo -\b-n\bn _\bw_\bo_\br_\bd_\bl_\bi_\bs_\bt |
| 776 | The specified words are written to the shells standard output, |
| 777 | separated by spaces, and terminated with a newline unless the -\b-n\bn |
| 778 | option is specified. |
| 779 | |
| 780 | e\bel\bls\bse\be |
| 781 | e\ben\bnd\bd |
| 782 | e\ben\bnd\bdi\bif\bf |
| 783 | e\ben\bnd\bds\bsw\bw |
| 784 | See the description of the f\bfo\bor\bre\bea\bac\bch\bh, i\bif\bf, s\bsw\bwi\bit\btc\bch\bh, and w\bwh\bhi\bil\ble\be state- |
| 785 | ments below. |
| 786 | |
| 787 | e\bev\bva\bal\bl _\ba_\br_\bg ... |
| 788 | (As in sh(1).) The arguments are read as input to the shell and the |
| 789 | resulting command(s) executed in the context of the current shell. |
| 790 | This is usually used to execute commands generated as the result of |
| 791 | command or variable substitution, since parsing occurs before these |
| 792 | substitutions. See tset(1) for an example of using e\bev\bva\bal\bl. |
| 793 | |
| 794 | e\bex\bxe\bec\bc _\bc_\bo_\bm_\bm_\ba_\bn_\bd |
| 795 | The specified command is executed in place of the current shell. |
| 796 | |
| 797 | e\bex\bxi\bit\bt |
| 798 | e\bex\bxi\bit\bt (_\be_\bx_\bp_\br) |
| 799 | The shell exits either with the value of the s\bst\bta\bat\btu\bus\bs variable (first |
| 800 | form) or with the value of the specified e\bex\bxp\bpr\br (second form). |
| 801 | |
| 802 | f\bfg\bg |
| 803 | f\bfg\bg %\b%_\bj_\bo_\bb ... |
| 804 | Brings the current or specified jobs into the foreground, |
| 805 | continuing them if they were stopped. |
| 806 | |
| 807 | f\bfo\bor\bre\bea\bac\bch\bh _\bn_\ba_\bm_\be (_\bw_\bo_\br_\bd_\bl_\bi_\bs_\bt) |
| 808 | ... |
| 809 | e\ben\bnd\bd The variable n\bna\bam\bme\be is successively set to each member of w\bwo\bor\brd\bdl\bli\bis\bst\bt |
| 810 | and the sequence of commands between this command and the matching |
| 811 | e\ben\bnd\bd are executed. (Both f\bfo\bor\bre\bea\bac\bch\bh and e\ben\bnd\bd must appear alone on |
| 812 | separate lines.) The builtin command c\bco\bon\bnt\bti\bin\bnu\bue\be may be used to con- |
| 813 | tinue the loop prematurely and the builtin command b\bbr\bre\bea\bak\bk to ter- |
| 814 | minate it prematurely. When this command is read from the termi- |
| 815 | nal, the loop is read up once prompting with `?' before any state- |
| 816 | ments in the loop are executed. If you make a mistake typing in a |
| 817 | loop at the terminal you can rub it out. |
| 818 | |
| 819 | g\bgl\blo\bob\bb _\bw_\bo_\br_\bd_\bl_\bi_\bs_\bt |
| 820 | Like e\bec\bch\bho\bo but no `\' escapes are recognized and words are delimited |
| 821 | by null characters in the output. Useful for programs which wish |
| 822 | to use the shell to filename expand a list of words. |
| 823 | |
| 824 | g\bgo\bot\bto\bo _\bw_\bo_\br_\bd |
| 825 | The specified w\bwo\bor\brd\bd is filename and command expanded to yield a |
| 826 | string of the form `label'. The shell rewinds its input as much as |
| 827 | possible and searches for a line of the form `label:' possibly pre- |
| 828 | ceded by blanks or tabs. Execution continues after the specified |
| 829 | line. |
| 830 | |
| 831 | h\bha\bas\bsh\bhs\bst\bta\bat\bt |
| 832 | Print a statistics line indicating how effective the internal hash |
| 833 | table has been at locating commands (and avoiding e\bex\bxe\bec\bc's). An e\bex\bxe\bec\bc |
| 834 | is attempted for each component of the _\bp_\ba_\bt_\bh where the hash function |
| 835 | indicates a possible hit, and in each component which does not be- |
| 836 | gin with a `/'. |
| 837 | |
| 838 | h\bhi\bis\bst\bto\bor\bry\by |
| 839 | h\bhi\bis\bst\bto\bor\bry\by _\bn |
| 840 | h\bhi\bis\bst\bto\bor\bry\by -\b-r\br _\bn |
| 841 | h\bhi\bis\bst\bto\bor\bry\by -\b-h\bh _\bn |
| 842 | Displays the history event list; if _\bn is given only the _\bn most re- |
| 843 | cent events are printed. The -\b-r\br option reverses the order of prin- |
| 844 | tout to be most recent first rather than oldest first. The -\b-h\bh op- |
| 845 | tion causes the history list to be printed without leading numbers. |
| 846 | This is used to produce files suitable for sourceing using the -h |
| 847 | option to s\bso\bou\bur\brc\bce\be. |
| 848 | |
| 849 | i\bif\bf (_\be_\bx_\bp_\br) |
| 850 | _\bc_\bo_\bm_\bm_\ba_\bn_\bd If the specified expression evaluates true, then the single |
| 851 | _\bc_\bo_\bm_\bm_\ba_\bn_\bd with arguments is executed. Variable substitution on |
| 852 | _\bc_\bo_\bm_\bm_\ba_\bn_\bd happens early, at the same time it does for the rest of the |
| 853 | i\bif\bf _\bc_\bo_\bm_\bm_\ba_\bn_\bd. _\bC_\bo_\bm_\bm_\ba_\bn_\bd must be a simple command, not a pipeline, a |
| 854 | command list, or a parenthesized command list. Input/output |
| 855 | redirection occurs even if _\be_\bx_\bp_\br is false, when command is n\bno\bot\bt exe- |
| 856 | cuted (this is a bug). |
| 857 | |
| 858 | i\bif\bf (_\be_\bx_\bp_\br) _\bt_\bh_\be_\bn |
| 859 | ... |
| 860 | e\bel\bls\bse\be i\bif\bf (_\be_\bx_\bp_\br_\b2) t\bth\bhe\ben\bn |
| 861 | ... |
| 862 | e\bel\bls\bse\be |
| 863 | ... |
| 864 | e\ben\bnd\bdi\bif\bf |
| 865 | If the specified _\be_\bx_\bp_\br is true then the commands to the first e\bel\bls\bse\be |
| 866 | are executed; otherwise if _\be_\bx_\bp_\br_\b2 is true then the commands to the |
| 867 | second e\bel\bls\bse\be are executed, etc. Any number of e\bel\bls\bse\be-\b-i\bif\bf pairs are |
| 868 | possible; only one e\ben\bnd\bdi\bif\bf is needed. The e\bel\bls\bse\be part is likewise op- |
| 869 | tional. (The words e\bel\bls\bse\be and e\ben\bnd\bdi\bif\bf must appear at the beginning of |
| 870 | input lines; the i\bif\bf must appear alone on its input line or after an |
| 871 | e\bel\bls\bse\be.) |
| 872 | |
| 873 | j\bjo\bob\bbs\bs |
| 874 | j\bjo\bob\bbs\bs -\b-l\bl |
| 875 | Lists the active jobs; given the -\b-l\bl options lists process id's in |
| 876 | addition to the normal information. |
| 877 | |
| 878 | k\bki\bil\bll\bl %\b%_\bj_\bo_\bb |
| 879 | k\bki\bil\bll\bl _\bp_\bi_\bd |
| 880 | k\bki\bil\bll\bl -\b-s\bsi\big\bg_\bp_\bi_\bd ... |
| 881 | k\bki\bil\bll\bl -\b-l\bl |
| 882 | Sends either the TERM (terminate) signal or the specified signal to |
| 883 | the specified jobs or processes. Signals are either given by |
| 884 | number or by names (as given in /_\bu_\bs_\br/_\bi_\bn_\bc_\bl_\bu_\bd_\be/_\bs_\bi_\bg_\bn_\ba_\bl._\bh, stripped of |
| 885 | the prefix ``SIG''). The signal names are listed by ``kill -l''. |
| 886 | There is no default, saying just `kill' does not send a signal to |
| 887 | the current job. If the signal being sent is TERM (terminate) or |
| 888 | HUP (hangup), then the job or process will be sent a CONT (contin- |
| 889 | ue) signal as well. |
| 890 | |
| 891 | l\bli\bim\bmi\bit\bt |
| 892 | l\bli\bim\bmi\bit\bt _\br_\be_\bs_\bo_\bu_\br_\bc_\be |
| 893 | l\bli\bim\bmi\bit\bt _\br_\be_\bs_\bo_\bu_\br_\bc_\be _\bm_\ba_\bx_\bi_\bm_\bu_\bm-_\bu_\bs_\be |
| 894 | l\bli\bim\bmi\bit\bt -\b-h\bh |
| 895 | l\bli\bim\bmi\bit\bt -\b-h\bh _\br_\be_\bs_\bo_\bu_\br_\bc_\be |
| 896 | l\bli\bim\bmi\bit\bt -\b-h\bh _\br_\be_\bs_\bo_\bu_\br_\bc_\be _\bm_\ba_\bx_\bi_\bm_\bu_\bm-_\bu_\bs_\be |
| 897 | Limits the consumption by the current process and each process it |
| 898 | creates to not individually exceed _\bm_\ba_\bx_\bi_\bm_\bu_\bm-_\bu_\bs_\be on the specified |
| 899 | _\br_\be_\bs_\bo_\bu_\br_\bc_\be. If no _\bm_\ba_\bx_\bi_\bm_\bu_\bm-_\bu_\bs_\be is given, then the current limit is |
| 900 | printed; if no _\br_\be_\bs_\bo_\bu_\br_\bc_\be is given, then all limitations are given. |
| 901 | If the -\b-h\bh flag is given, the hard limits are used instead of the |
| 902 | current limits. The hard limits impose a ceiling on the values of |
| 903 | the current limits. Only the super-user may raise the hard limits, |
| 904 | but a user may lower or raise the current limits within the legal |
| 905 | range. |
| 906 | |
| 907 | Resources controllable currently include _\bc_\bp_\bu_\bt_\bi_\bm_\be (the maximum |
| 908 | number of cpu-seconds to be used by each process), _\bf_\bi_\bl_\be_\bs_\bi_\bz_\be (the |
| 909 | largest single file which can be created), _\bd_\ba_\bt_\ba_\bs_\bi_\bz_\be (the maximum |
| 910 | growth of the data+stack region via sbrk(2) beyond the end of the |
| 911 | program text), _\bs_\bt_\ba_\bc_\bk_\bs_\bi_\bz_\be (the maximum size of the automatically- |
| 912 | extended stack region), and _\bc_\bo_\br_\be_\bd_\bu_\bm_\bp_\bs_\bi_\bz_\be (the size of the largest |
| 913 | core dump that will be created). |
| 914 | |
| 915 | The _\bm_\ba_\bx_\bi_\bm_\bu_\bm-_\bu_\bs_\be may be given as a (floating point or integer) |
| 916 | number followed by a scale factor. For all limits other than |
| 917 | _\bc_\bp_\bu_\bt_\bi_\bm_\be the default scale is `k' or `kilobytes' (1024 bytes); a |
| 918 | scale factor of `m' or `megabytes' may also be used. For _\bc_\bp_\bu_\bt_\bi_\bm_\be |
| 919 | the default scaling is `seconds', while `m' for minutes or `h' for |
| 920 | hours, or a time of the form `mm:ss' giving minutes and seconds may |
| 921 | be used. |
| 922 | |
| 923 | For both _\br_\be_\bs_\bo_\bu_\br_\bc_\be names and scale factors, unambiguous prefixes of |
| 924 | the names suffice. |
| 925 | |
| 926 | l\blo\bog\bgi\bin\bn |
| 927 | Terminate a login shell, replacing it with an instance of |
| 928 | /_\bb_\bi_\bn/_\bl_\bo_\bg_\bi_\bn. This is one way to log off, included for compatibility |
| 929 | with sh(1). |
| 930 | |
| 931 | l\blo\bog\bgo\bou\but\bt |
| 932 | Terminate a login shell. Especially useful if i\big\bgn\bno\bor\bre\bee\beo\bof\bf is set. |
| 933 | |
| 934 | n\bni\bic\bce\be |
| 935 | n\bni\bic\bce\be +_\bn_\bu_\bm_\bb_\be_\br |
| 936 | n\bni\bic\bce\be _\bc_\bo_\bm_\bm_\ba_\bn_\bd |
| 937 | n\bni\bic\bce\be +_\bn_\bu_\bm_\bb_\be_\br _\bc_\bo_\bm_\bm_\ba_\bn_\bd |
| 938 | The first form sets the scheduling priority for this shell to 4. |
| 939 | The second form sets the priority to the given _\bn_\bu_\bm_\bb_\be_\br. The final |
| 940 | two forms run command at priority 4 and _\bn_\bu_\bm_\bb_\be_\br respectively. The |
| 941 | greater the number, the less cpu the process will get. The super- |
| 942 | user may specify negative priority by using `nice -number ...'. |
| 943 | Command is always executed in a sub-shell, and the restrictions |
| 944 | placed on commands in simple i\bif\bf statements apply. |
| 945 | |
| 946 | n\bno\boh\bhu\bup\bp |
| 947 | n\bno\boh\bhu\bup\bp _\bc_\bo_\bm_\bm_\ba_\bn_\bd |
| 948 | The first form can be used in shell scripts to cause hangups to be |
| 949 | ignored for the remainder of the script. The second form causes |
| 950 | the specified command to be run with hangups ignored. All |
| 951 | processes detached with `&' are effectively n\bno\boh\bhu\bup\bp'ed. |
| 952 | |
| 953 | n\bno\bot\bti\bif\bfy\by |
| 954 | n\bno\bot\bti\bif\bfy\by %\b% _\bj_\bo_\bb ... |
| 955 | Causes the shell to notify the user asynchronously when the status |
| 956 | of the current or specified jobs changes; normally notification is |
| 957 | presented before a prompt. This is automatic if the shell variable |
| 958 | n\bno\bot\bti\bif\bfy\by is set. |
| 959 | |
| 960 | o\bon\bni\bin\bnt\btr\br |
| 961 | o\bon\bni\bin\bnt\btr\br -\b- |
| 962 | o\bon\bni\bin\bnt\btr\br _\bl_\ba_\bb_\be_\bl |
| 963 | Control the action of the shell on interrupts. The first form |
| 964 | restores the default action of the shell on interrupts which is to |
| 965 | terminate shell scripts or to return to the terminal command input |
| 966 | level. The second form `onintr -' causes all interrupts to be |
| 967 | ignored. The final form causes the shell to execute a `goto label' |
| 968 | when an interrupt is received or a child process terminates because |
| 969 | it was interrupted. |
| 970 | |
| 971 | In any case, if the shell is running detached and interrupts are |
| 972 | being ignored, all forms of o\bon\bni\bin\bnt\btr\br have no meaning and interrupts |
| 973 | continue to be ignored by the shell and all invoked commands. |
| 974 | |
| 975 | p\bpo\bop\bpd\bd |
| 976 | p\bpo\bop\bpd\bd +_\bn |
| 977 | Pops the directory stack, returning to the new top directory. With |
| 978 | an argument `+_\bn' discards the _\bn'th entry in the stack. The |
| 979 | elements of the directory stack are numbered from 0 starting at the |
| 980 | top. |
| 981 | |
| 982 | p\bpu\bus\bsh\bhd\bd |
| 983 | p\bpu\bus\bsh\bhd\bd _\bn_\ba_\bm_\be |
| 984 | p\bpu\bus\bsh\bhd\bd _\bn |
| 985 | With no arguments, p\bpu\bus\bsh\bhd\bd exchanges the top two elements of the |
| 986 | directory stack. Given a _\bn_\ba_\bm_\be argument, p\bpu\bus\bsh\bhd\bd changes to the new |
| 987 | directory (ala c\bcd\bd) and pushes the old current working directory (as |
| 988 | in c\bcs\bsw\bw) onto the directory stack. With a numeric argument, rotates |
| 989 | the _\bn'th argument of the directory stack around to be the top |
| 990 | element and changes to it. The members of the directory stack are |
| 991 | numbered from the top starting at 0. |
| 992 | r\bre\beh\bha\bas\bsh\bh |
| 993 | Causes the internal hash table of the contents of the directories |
| 994 | in the p\bpa\bat\bth\bh variable to be recomputed. This is needed if new com- |
| 995 | mands are added to directories in the p\bpa\bat\bth\bh while you are logged in. |
| 996 | This should only be necessary if you add commands to one of your |
| 997 | own directories, or if a systems programmer changes the contents of |
| 998 | one of the system directories. |
| 999 | |
| 1000 | r\bre\bep\bpe\bea\bat\bt _\bc_\bo_\bu_\bn_\bt _\bc_\bo_\bm_\bm_\ba_\bn_\bd |
| 1001 | The specified _\bc_\bo_\bm_\bm_\ba_\bn_\bd which is subject to the same restrictions as |
| 1002 | the _\bc_\bo_\bm_\bm_\ba_\bn_\bd in the one line i\bif\bf statement above, is executed _\bc_\bo_\bu_\bn_\bt |
| 1003 | times. I/O redirections occur exactly once, even if _\bc_\bo_\bu_\bn_\bt is 0. |
| 1004 | |
| 1005 | s\bse\bet\bt |
| 1006 | s\bse\bet\bt _\bn_\ba_\bm_\be |
| 1007 | s\bse\bet\bt _\bn_\ba_\bm_\be=_\bw_\bo_\br_\bd |
| 1008 | s\bse\bet\bt _\bn_\ba_\bm_\be[index]=_\bw_\bo_\br_\bd |
| 1009 | s\bse\bet\bt _\bn_\ba_\bm_\be=(_\bw_\bo_\br_\bd_\bl_\bi_\bs_\bt) |
| 1010 | The first form of the command shows the value of all shell |
| 1011 | variables. Variables which have other than a single word as value |
| 1012 | print as a parenthesized word list. The second form sets n\bna\bam\bme\be to |
| 1013 | the null string. The third form sets n\bna\bam\bme\be to the single w\bwo\bor\brd\bd. The |
| 1014 | fourth form sets the _\bi_\bn_\bd_\be_\bx'th component of name to word; this |
| 1015 | component must already exist. The final form sets _\bn_\ba_\bm_\be to the list |
| 1016 | of words in _\bw_\bo_\br_\bd_\bl_\bi_\bs_\bt. In all cases the value is command and |
| 1017 | filename expanded. |
| 1018 | |
| 1019 | These arguments may be repeated to set multiple values in a single |
| 1020 | set command. Note however, that variable expansion happens for all |
| 1021 | arguments before any setting occurs. |
| 1022 | |
| 1023 | s\bse\bet\bte\ben\bnv\bv |
| 1024 | s\bse\bet\bte\ben\bnv\bv _\bn_\ba_\bm_\be _\bv_\ba_\bl_\bu_\be |
| 1025 | s\bse\bet\bte\ben\bnv\bv _\bn_\ba_\bm_\be |
| 1026 | The first form lists all current environment variables. The last |
| 1027 | form sets the value of environment variable _\bn_\ba_\bm_\be to be _\bv_\ba_\bl_\bu_\be, a |
| 1028 | single string. The second form sets _\bn_\ba_\bm_\be to an empty string. The |
| 1029 | most commonly used environment variable USER, TERM, and PATH are |
| 1030 | automatically imported to and exported from the c\bcs\bsh\bh variables _\bu_\bs_\be_\br, |
| 1031 | [_\bt_\be_\br_\bm], and _\bp_\ba_\bt_\bh; there is no need to use s\bse\bet\bte\ben\bnv\bv for these. |
| 1032 | |
| 1033 | s\bsh\bhi\bif\bft\bt |
| 1034 | s\bsh\bhi\bif\bft\bt _\bv_\ba_\br_\bi_\ba_\bb_\bl_\be |
| 1035 | The members of a\bar\brg\bgv\bv are shifted to the left, discarding a\bar\brg\bgv\bv[1]. |
| 1036 | It is an error for a\bar\brg\bgv\bv not to be set or to have less than one word |
| 1037 | as value. The second form performs the same function on the speci- |
| 1038 | fied variable. |
| 1039 | |
| 1040 | s\bso\bou\bur\brc\bce\be _\bn_\ba_\bm_\be |
| 1041 | s\bso\bou\bur\brc\bce\be -\b-h\bh _\bn_\ba_\bm_\be |
| 1042 | The shell reads commands from n\bna\bam\bme\be. S\bSo\bou\bur\brc\bce\be commands may be nested; |
| 1043 | if they are nested too deeply the shell may run out of file |
| 1044 | descriptors. An error in a s\bso\bou\bur\brc\bce\be at any level terminates all |
| 1045 | nested s\bso\bou\bur\brc\bce\be commands. Normally input during s\bso\bou\bur\brc\bce\be commands is |
| 1046 | not placed on the history list; the -h option causes the commands |
| 1047 | to be placed in the history list without being executed. |
| 1048 | |
| 1049 | s\bst\bto\bop\bp |
| 1050 | s\bst\bto\bop\bp %\b%_\bj_\bo_\bb ... |
| 1051 | Stops the current or specified job which is executing in the |
| 1052 | background. |
| 1053 | |
| 1054 | s\bsu\bus\bsp\bpe\ben\bnd\bd |
| 1055 | Causes the shell to stop in its tracks, much as if it had been sent |
| 1056 | a stop signal with ^\b^Z\bZ. This is most often used to stop shells |
| 1057 | started by su(1). |
| 1058 | s\bsw\bwi\bit\btc\bch\bh (_\bs_\bt_\br_\bi_\bn_\bg) |
| 1059 | c\bca\bas\bse\be _\bs_\bt_\br_\b1: |
| 1060 | ... |
| 1061 | b\bbr\bre\bea\bak\bks\bsw\bw |
| 1062 | ... |
| 1063 | d\bde\bef\bfa\bau\bul\blt\bt: |
| 1064 | ... |
| 1065 | b\bbr\bre\bea\bak\bks\bsw\bw |
| 1066 | e\ben\bnd\bds\bsw\bw |
| 1067 | Each case label is successively matched, against the specified |
| 1068 | _\bs_\bt_\br_\bi_\bn_\bg which is first command and filename expanded. The file |
| 1069 | metacharacters `*', `?' and `[...]' may be used in the case labels, |
| 1070 | which are variable expanded. If none of the labels match before a |
| 1071 | `default' label is found, then the execution begins after the de- |
| 1072 | fault label. Each case label and the default label must appear at |
| 1073 | the beginning of a line. The command b\bbr\bre\bea\bak\bks\bsw\bw causes execution to |
| 1074 | continue after the e\ben\bnd\bds\bsw\bw. Otherwise control may fall through case |
| 1075 | labels and default labels as in C. If no label matches and there |
| 1076 | is no default, execution continues after the e\ben\bnd\bds\bsw\bw. |
| 1077 | |
| 1078 | t\bti\bim\bme\be |
| 1079 | t\bti\bim\bme\be _\bc_\bo_\bm_\bm_\ba_\bn_\bd |
| 1080 | With no argument, a summary of time used by this shell and its |
| 1081 | children is printed. If arguments are given the specified simple |
| 1082 | command is timed and a time summary as described under the t\bti\bim\bme\be |
| 1083 | variable is printed. If necessary, an extra shell is created to |
| 1084 | print the time statistic when the command completes. |
| 1085 | |
| 1086 | u\bum\bma\bas\bsk\bk |
| 1087 | u\bum\bma\bas\bsk\bk _\bv_\ba_\bl_\bu_\be |
| 1088 | The file creation mask is displayed (first form) or set to the |
| 1089 | specified value (second form). The mask is given in octal. Common |
| 1090 | values for the mask are 002 giving all access to the group and read |
| 1091 | and execute access to others or 022 giving all access except no |
| 1092 | write access for users in the group or others. |
| 1093 | |
| 1094 | u\bun\bna\bal\bli\bia\bas\bs _\bp_\ba_\bt_\bt_\be_\br_\bn |
| 1095 | All aliases whose names match the specified pattern are discarded. |
| 1096 | Thus all aliases are removed by `unalias *'. It is not an error |
| 1097 | for nothing to be u\bun\bna\bal\bli\bia\bas\bse\bed\bd. |
| 1098 | |
| 1099 | u\bun\bnh\bha\bas\bsh\bh |
| 1100 | Use of the internal hash table to speed location of executed pro- |
| 1101 | grams is disabled. |
| 1102 | |
| 1103 | u\bun\bnl\bli\bim\bmi\bit\bt |
| 1104 | u\bun\bnl\bli\bim\bmi\bit\bt _\br_\be_\bs_\bo_\bu_\br_\bc_\be |
| 1105 | u\bun\bnl\bli\bim\bmi\bit\bt -\b-h\bh |
| 1106 | u\bun\bnl\bli\bim\bmi\bit\bt -\b-h\bh _\br_\be_\bs_\bo_\bu_\br_\bc_\be |
| 1107 | Removes the limitation on _\br_\be_\bs_\bo_\bu_\br_\bc_\be. If no _\br_\be_\bs_\bo_\bu_\br_\bc_\be is specified, |
| 1108 | then all _\br_\be_\bs_\bo_\bu_\br_\bc_\be limitations are removed. If -\b-h\bh is given, the |
| 1109 | corresponding hard limits are removed. Only the super-user may do |
| 1110 | this. |
| 1111 | |
| 1112 | u\bun\bns\bse\bet\bt _\bp_\ba_\bt_\bt_\be_\br_\bn |
| 1113 | All variables whose names match the specified pattern are removed. |
| 1114 | Thus all variables are removed by `unset *'; this has noticeably |
| 1115 | distasteful side-effects. It is not an error for nothing to be |
| 1116 | u\bun\bns\bse\bet\bt. |
| 1117 | |
| 1118 | u\bun\bns\bse\bet\bte\ben\bnv\bv _\bp_\ba_\bt_\bt_\be_\br_\bn |
| 1119 | Removes all variables whose name match the specified pattern from |
| 1120 | the environment. See also the s\bse\bet\bte\ben\bnv\bv command above and prin- |
| 1121 | tenv(1). |
| 1122 | |
| 1123 | |
| 1124 | w\bwa\bai\bit\bt |
| 1125 | All background jobs are waited for. It the shell is interactive, |
| 1126 | then an interrupt can disrupt the wait, at which time the shell |
| 1127 | prints names and job numbers of all jobs known to be outstanding. |
| 1128 | |
| 1129 | w\bwh\bhi\bil\ble\be (_\be_\bx_\bp_\br) |
| 1130 | ... |
| 1131 | e\ben\bnd\bd While the specified expression evaluates non-zero, the commands |
| 1132 | between the w\bwh\bhi\bil\ble\be and the matching end are evaluated. B\bBr\bre\bea\bak\bk and |
| 1133 | c\bco\bon\bnt\bti\bin\bnu\bue\be may be used to terminate or continue the loop prematurely. |
| 1134 | (The w\bwh\bhi\bil\ble\be and e\ben\bnd\bd must appear alone on their input lines.) Prompt- |
| 1135 | ing occurs here the first time through the loop as for the f\bfo\bor\bre\bea\bac\bch\bh |
| 1136 | statement if the input is a terminal. |
| 1137 | |
| 1138 | %\b% _\bj_\bo_\bb |
| 1139 | Brings the specified job into the foreground. |
| 1140 | |
| 1141 | %\b% _\bj_\bo_\bb &\b& |
| 1142 | Continues the specified job in the background. |
| 1143 | |
| 1144 | @\b@ |
| 1145 | @\b@ _\bn_\ba_\bm_\be = _\be_\bx_\bp_\br |
| 1146 | @\b@ _\bn_\ba_\bm_\be[index] =expr |
| 1147 | The first form prints the values of all the shell variables. The |
| 1148 | second form sets the specified _\bn_\ba_\bm_\be to the value of _\be_\bx_\bp_\br. If the |
| 1149 | expression contains `<', `>', `&' or `' then at least this part of |
| 1150 | the expression must be placed within `(' `)'. The third form as- |
| 1151 | signs the value of _\be_\bx_\bp_\br to the _\bi_\bn_\bd_\be_\bx'th argument of _\bn_\ba_\bm_\be. Both |
| 1152 | _\bn_\ba_\bm_\be and its _\bi_\bn_\bd_\be_\bx'th component must already exist. |
| 1153 | |
| 1154 | |
| 1155 | The operators `*=', `+=', etc are available as in C. The space |
| 1156 | separating the name from the assignment operator is optional. Spaces |
| 1157 | are, however, mandatory in separating components of _\be_\bx_\bp_\br which would oth- |
| 1158 | erwise be single words. |
| 1159 | |
| 1160 | Special postfix `++' and `--' operators increment and decrement _\bn_\ba_\bm_\be |
| 1161 | respectively, i.e. `@ i++'. |
| 1162 | |
| 1163 | P\bPr\bre\be-\b-d\bde\bef\bfi\bin\bne\bed\bd a\ban\bnd\bd e\ben\bnv\bvi\bir\bro\bon\bnm\bme\ben\bnt\bt v\bva\bar\bri\bia\bab\bbl\ble\bes\bs |
| 1164 | The following variables have special meaning to the shell. Of these, |
| 1165 | _\ba_\br_\bg_\bv, _\bc_\bw_\bd, _\bh_\bo_\bm_\be, _\bp_\ba_\bt_\bh, _\bp_\br_\bo_\bm_\bp_\bt, _\bs_\bh_\be_\bl_\bl and _\bs_\bt_\ba_\bt_\bu_\bs are always set by the |
| 1166 | shell. Except for _\bc_\bw_\bd and _\bs_\bt_\ba_\bt_\bu_\bs this setting occurs only at initializa- |
| 1167 | tion; these variables will not then be modified unless this is done ex- |
| 1168 | plicitly by the user. |
| 1169 | |
| 1170 | This shell copies the environment variable USER into the variable _\bu_\bs_\be_\br, |
| 1171 | TERM into _\bt_\be_\br_\bm, and HOME into _\bh_\bo_\bm_\be, and copies these back into the en- |
| 1172 | vironment whenever the normal shell variables are reset. The environment |
| 1173 | variable PATH is likewise handled; it is not necessary to worry about its |
| 1174 | setting other than in the file ._\bc_\bs_\bh_\br_\bc as inferior c\bcs\bsh\bh processes will im- |
| 1175 | port the definition of _\bp_\ba_\bt_\bh from the environment, and re-export it if you |
| 1176 | then change it. |
| 1177 | |
| 1178 | a\bar\brg\bgv\bv Set to the arguments to the shell, it is from this variable |
| 1179 | that positional parameters are substituted, i.e. `$1' is re- |
| 1180 | placed by `$argv[1]', etc. |
| 1181 | |
| 1182 | c\bcd\bdp\bpa\bat\bth\bh Gives a list of alternate directories searched to find sub- |
| 1183 | directories in _\bc_\bh_\bd_\bi_\br commands. |
| 1184 | |
| 1185 | c\bcw\bwd\bd The full pathname of the current directory. |
| 1186 | |
| 1187 | e\bec\bch\bho\bo Set when the -\b-x\bx command line option is given. Causes each com- |
| 1188 | mand and its arguments to be echoed just before it is executed. |
| 1189 | For non-builtin commands all expansions occur before echoing. |
| 1190 | Builtin commands are echoed before command and filename substi- |
| 1191 | tution, since these substitutions are then done selectively. |
| 1192 | |
| 1193 | f\bfi\bil\ble\bec\bc Enable file name completion. |
| 1194 | |
| 1195 | h\bhi\bis\bst\btc\bch\bha\bar\brs\bs |
| 1196 | Can be given a string value to change the characters used in |
| 1197 | history substitution. The first character of its value is used |
| 1198 | as the history substitution character, replacing the default |
| 1199 | character `!'. The second character of its value replaces the |
| 1200 | character `|\b^' in quick substitutions. |
| 1201 | |
| 1202 | h\bhi\bis\bst\bto\bor\bry\by Can be given a numeric value to control the size of the history |
| 1203 | list. Any command which has been referenced in this many |
| 1204 | events will not be discarded. Too large values of _\bh_\bi_\bs_\bt_\bo_\br_\by may |
| 1205 | run the shell out of memory. The last executed command is al- |
| 1206 | ways saved on the history list. |
| 1207 | |
| 1208 | h\bho\bom\bme\be The home directory of the invoker, initialized from the en- |
| 1209 | vironment. The filename expansion of `~' refers to this |
| 1210 | variable. |
| 1211 | |
| 1212 | i\big\bgn\bno\bor\bre\bee\beo\bof\bf |
| 1213 | If set the shell ignores end-of-file from input devices which |
| 1214 | are terminals. This prevents shells from accidentally being |
| 1215 | killed by control-D's. |
| 1216 | |
| 1217 | m\bma\bai\bil\bl The files where the shell checks for mail. This is done after |
| 1218 | each command completion which will result in a prompt, if a |
| 1219 | specified interval has elapsed. The shell says `You have new |
| 1220 | mail.' if the file exists with an access time not greater than |
| 1221 | its modify time. |
| 1222 | |
| 1223 | If the first word of the value of _\bm_\ba_\bi_\bl is numeric it specifies |
| 1224 | a different mail checking interval, in seconds, than the de- |
| 1225 | fault, which is 10 minutes. |
| 1226 | |
| 1227 | If multiple mail files are specified, then the shell says `New |
| 1228 | mail in _\bn_\ba_\bm_\be' when there is mail in the file _\bn_\ba_\bm_\be. |
| 1229 | |
| 1230 | n\bno\boc\bcl\blo\bob\bbb\bbe\ber\br |
| 1231 | As described in the section on _\bI_\bn_\bp_\bu_\bt/_\bo_\bu_\bt_\bp_\bu_\bt, restrictions are |
| 1232 | placed on output redirection to insure that files are not ac- |
| 1233 | cidentally destroyed, and that `>>' redirections refer to ex- |
| 1234 | isting files. |
| 1235 | |
| 1236 | n\bno\bog\bgl\blo\bob\bb If set, filename expansion is inhibited. This is most useful |
| 1237 | in shell scripts which are not dealing with filenames, or after |
| 1238 | a list of filenames has been obtained and further expansions |
| 1239 | are not desirable. |
| 1240 | |
| 1241 | n\bno\bon\bno\bom\bma\bat\btc\bch\bh |
| 1242 | If set, it is not an error for a filename expansion to not |
| 1243 | match any existing files; rather the primitive pattern is re- |
| 1244 | turned. It is still an error for the primitive pattern to be |
| 1245 | malformed, i.e. `echo [' still gives an error. |
| 1246 | |
| 1247 | n\bno\bot\bti\bif\bfy\by If set, the shell notifies asynchronously of job completions. |
| 1248 | The default is to rather present job completions just before |
| 1249 | printing a prompt. |
| 1250 | |
| 1251 | p\bpa\bat\bth\bh Each word of the path variable specifies a directory in which |
| 1252 | commands are to be sought for execution. A null word specifies |
| 1253 | the current directory. If there is no _\bp_\ba_\bt_\bh variable then only |
| 1254 | full path names will execute. The usual search path is `.', |
| 1255 | `/bin' and `/usr/bin', but this may vary from system to system. |
| 1256 | For the super-user the default search path is `/etc', `/bin' |
| 1257 | and `/usr/bin'. A shell which is given neither the -\b-c\bc nor the |
| 1258 | -\b-t\bt option will normally hash the contents of the directories in |
| 1259 | the _\bp_\ba_\bt_\bh variable after reading ._\bc_\bs_\bh_\br_\bc, and each time the _\bp_\ba_\bt_\bh |
| 1260 | variable is reset. If new commands are added to these direc- |
| 1261 | tories while the shell is active, it may be necessary to give |
| 1262 | the _\br_\be_\bh_\ba_\bs_\bh or the commands may not be found. |
| 1263 | |
| 1264 | p\bpr\bro\bom\bmp\bpt\bt The string which is printed before each command is read from an |
| 1265 | interactive terminal input. If a `!' appears in the string it |
| 1266 | will be replaced by the current event number unless a preceding |
| 1267 | `\' is given. Default is `% ', or `# ' for the super-user. |
| 1268 | |
| 1269 | s\bsa\bav\bve\beh\bhi\bis\bst\bt |
| 1270 | Is given a numeric value to control the number of entries of |
| 1271 | the history list that are saved in ~/.history when the user |
| 1272 | logs out. Any command which has been referenced in this many |
| 1273 | events will be saved. During start up the shell sources |
| 1274 | ~/.history into the history list enabling history to be saved |
| 1275 | across logins. Too large values of _\bs_\ba_\bv_\be_\bh_\bi_\bs_\bt will slow down the |
| 1276 | shell during start up. |
| 1277 | |
| 1278 | s\bsh\bhe\bel\bll\bl The file in which the shell resides. This is used in forking |
| 1279 | shells to interpret files which have execute bits set, but |
| 1280 | which are not executable by the system. (See the description |
| 1281 | of _\bN_\bo_\bn-_\bb_\bu_\bi_\bl_\bt_\bi_\bn _\bC_\bo_\bm_\bm_\ba_\bn_\bd _\bE_\bx_\be_\bc_\bu_\bt_\bi_\bo_\bn below.) Initialized to the |
| 1282 | (system-dependent) home of the shell. |
| 1283 | |
| 1284 | s\bst\bta\bat\btu\bus\bs The status returned by the last command. If it terminated ab- |
| 1285 | normally, then 0200 is added to the status. Builtin commands |
| 1286 | which fail return exit status `1', all other builtin commands |
| 1287 | set status `0'. |
| 1288 | |
| 1289 | t\bti\bim\bme\be Controls automatic timing of commands. If set, then any com- |
| 1290 | mand which takes more than this many cpu seconds will cause a |
| 1291 | line giving user, system, and real times and a utilization per- |
| 1292 | centage which is the ratio of user plus system times to real |
| 1293 | time to be printed when it terminates. |
| 1294 | |
| 1295 | v\bve\ber\brb\bbo\bos\bse\be Set by the -\b-v\bv command line option, causes the words of each |
| 1296 | command to be printed after history substitution. |
| 1297 | |
| 1298 | N\bNo\bon\bn-\b-b\bbu\bui\bil\blt\bti\bin\bn c\bco\bom\bmm\bma\ban\bnd\bd e\bex\bxe\bec\bcu\but\bti\bio\bon\bn |
| 1299 | When a command to be executed is found to not be a builtin command the |
| 1300 | shell attempts to execute the command via execve(2). Each word in the |
| 1301 | variable _\bp_\ba_\bt_\bh names a directory from which the shell will attempt to exe- |
| 1302 | cute the command. If it is given neither a -\b-c\bc nor a -\b-t\bt option, the shell |
| 1303 | will hash the names in these directories into an internal table so that |
| 1304 | it will only try an e\bex\bxe\bec\bc in a directory if there is a possibility that |
| 1305 | the command resides there. This greatly speeds command location when a |
| 1306 | large number of directories are present in the search path. If this |
| 1307 | mechanism has been turned off (via u\bun\bnh\bha\bas\bsh\bh), or if the shell was given a |
| 1308 | -\b-c\bc or -\b-t\bt argument, and in any case for each directory component of _\bp_\ba_\bt_\bh |
| 1309 | which does not begin with a `/', the shell concatenates with the given |
| 1310 | command name to form a path name of a file which it then attempts to exe- |
| 1311 | cute. |
| 1312 | |
| 1313 | Parenthesized commands are always executed in a subshell. Thus |
| 1314 | |
| 1315 | (cd ; pwd) ; pwd |
| 1316 | |
| 1317 | prints the _\bh_\bo_\bm_\be directory; leaving you where you were (printing this |
| 1318 | after the home directory), while |
| 1319 | |
| 1320 | cd ; pwd |
| 1321 | |
| 1322 | leaves you in the _\bh_\bo_\bm_\be directory. Parenthesized commands are most often |
| 1323 | used to prevent c\bch\bhd\bdi\bir\br from affecting the current shell. |
| 1324 | |
| 1325 | If the file has execute permissions but is not an executable binary to |
| 1326 | the system, then it is assumed to be a file containing shell commands and |
| 1327 | a new shell is spawned to read it. |
| 1328 | |
| 1329 | If there is an a\bal\bli\bia\bas\bs for s\bsh\bhe\bel\bll\bl then the words of the alias will be |
| 1330 | prepended to the argument list to form the shell command. The first word |
| 1331 | of the a\bal\bli\bia\bas\bs should be the full path name of the shell (e.g. `$shell'). |
| 1332 | Note that this is a special, late occurring, case of a\bal\bli\bia\bas\bs substitution, |
| 1333 | and only allows words to be prepended to the argument list without modif- |
| 1334 | ication. |
| 1335 | |
| 1336 | S\bSi\big\bgn\bna\bal\bl h\bha\ban\bnd\bdl\bli\bin\bng\bg |
| 1337 | The shell normally ignores _\bq_\bu_\bi_\bt signals. Jobs running detached (either |
| 1338 | by &\b& or the b\bbg\bg or %\b%.\b..\b..\b. &\b& commands) are immune to signals generated from |
| 1339 | the keyboard, including hangups. Other signals have the values which the |
| 1340 | shell inherited from its parent. The shell's handling of interrupts and |
| 1341 | terminate signals in shell scripts can be controlled by o\bon\bni\bin\bnt\btr\br. Login |
| 1342 | shells catch the _\bt_\be_\br_\bm_\bi_\bn_\ba_\bt_\be signal; otherwise this signal is passed on to |
| 1343 | children from the state in the shell's parent. In no case are interrupts |
| 1344 | allowed when a login shell is reading the file ._\bl_\bo_\bg_\bo_\bu_\bt. |
| 1345 | |
| 1346 | A\bAU\bUT\bTH\bHO\bOR\bR |
| 1347 | William Joy. Job control and directory stack features first implemented |
| 1348 | by J.E. Kulp of I.I.A.S.A, Laxenburg, Austria, with different syntax than |
| 1349 | that used now. File name completion code written by Ken Greer, HP Labs. |
| 1350 | |
| 1351 | F\bFI\bIL\bLE\bES\bS |
| 1352 | ~/._\bc_\bs_\bh_\br_\bc Read at beginning of execution by each shell. |
| 1353 | ~/._\bl_\bo_\bg_\bi_\bn Read by login shell, after `.cshrc' at login. |
| 1354 | ~/._\bl_\bo_\bg_\bo_\bu_\bt Read by login shell, at logout. |
| 1355 | /_\bb_\bi_\bn/_\bs_\bh Standard shell, for shell scripts not starting with a `#'. |
| 1356 | /_\bt_\bm_\bp/_\bs_\bh* Temporary file for `<<'. |
| 1357 | /_\be_\bt_\bc/_\bp_\ba_\bs_\bs_\bw_\bd Source of home directories for `~name'. |
| 1358 | |
| 1359 | |
| 1360 | L\bLI\bIM\bMI\bIT\bTA\bAT\bTI\bIO\bON\bNS\bS |
| 1361 | Word lengths - Words can be no longer than 1024 characters. The system |
| 1362 | limits argument lists to 10240 characters. The number of arguments to a |
| 1363 | command which involves filename expansion is limited to 1/6'th the number |
| 1364 | of characters allowed in an argument list. Command substitutions may |
| 1365 | substitute no more characters than are allowed in an argument list. To |
| 1366 | detect looping, the shell restricts the number of a\bal\bli\bia\bas\bs substitutions on |
| 1367 | a single line to 20. |
| 1368 | |
| 1369 | S\bSE\bEE\bE A\bAL\bLS\bSO\bO |
| 1370 | sh(1), access(2), execve(2), fork(2), killpg(2), pipe(2), sigvec(2), |
| 1371 | umask(2), setrlimit(2), wait(2), tty(4), a.out(5), environ(7), |
| 1372 | _\bA_\bn _\bi_\bn_\bt_\br_\bo_\bd_\bu_\bc_\bt_\bi_\bo_\bn _\bt_\bo _\bt_\bh_\be _\bC _\bs_\bh_\be_\bl_\bl |
| 1373 | |
| 1374 | H\bHI\bIS\bST\bTO\bOR\bRY\bY |
| 1375 | C\bCs\bsh\bh Appeared in 3 BSD. It was a first implementation of a command |
| 1376 | language interpreter incorporating a history mechanism (see H\bHi\bis\bst\bto\bor\bry\by |
| 1377 | S\bSu\bub\bbs\bst\bti\bit\btu\but\bti\bio\bon\bns\bs), job control facilities (see J\bJo\bob\bbs\bs), interactive file name |
| 1378 | and user name completion (see F\bFi\bil\ble\be N\bNa\bam\bme\be C\bCo\bom\bmp\bpl\ble\bet\bti\bio\bon\bn), and a C-like syntax. |
| 1379 | There are now many shells which also have these mechanisms, plus a few |
| 1380 | more (and maybe some bugs too), which are available thru the internet, or |
| 1381 | as contributed software such as the ksh(korn shell). |
| 1382 | |
| 1383 | B\bBU\bUG\bGS\bS |
| 1384 | When a command is restarted from a stop, the shell prints the directory |
| 1385 | it started in if this is different from the current directory; this can |
| 1386 | be misleading (i.e. wrong) as the job may have changed directories inter- |
| 1387 | nally. |
| 1388 | Shell builtin functions are not stoppable/restartable. Command sequences |
| 1389 | of the form `a ; b ; c' are also not handled gracefully when stopping is |
| 1390 | attempted. If you suspend `b', the shell will then immediately execute |
| 1391 | `c'. This is especially noticeable if this expansion results from an |
| 1392 | _\ba_\bl_\bi_\ba_\bs. It suffices to place the sequence of commands in ()'s to force it |
| 1393 | to a subshell, i.e. `( a ; b ; c )'. |
| 1394 | |
| 1395 | Control over tty output after processes are started is primitive; perhaps |
| 1396 | this will inspire someone to work on a good virtual terminal interface. |
| 1397 | In a virtual terminal interface much more interesting things could be |
| 1398 | done with output control. |
| 1399 | |
| 1400 | Alias substitution is most often used to clumsily simulate shell pro- |
| 1401 | cedures; shell procedures should be provided rather than aliases. |
| 1402 | |
| 1403 | Commands within loops, prompted for by `?', are not placed in the h\bhi\bis\bst\bto\bor\bry\by |
| 1404 | list. Control structure should be parsed rather than being recognized as |
| 1405 | built-in commands. This would allow control commands to be placed any- |
| 1406 | where, to be combined with `|', and to be used with `&' and `;' metasyn- |
| 1407 | tax. |
| 1408 | |
| 1409 | It should be possible to use the `:' modifiers on the output of command |
| 1410 | substitutions. All and more than one `:' modifier should be allowed on |
| 1411 | `$' substitutions. |
| 1412 | |
| 1413 | The way the f\bfi\bil\ble\bec\bc facility is implemented is ugly and expensive. |