|
|
1.1 root 1:
2:
3: ksh Command ksh
4:
5:
6:
7:
8: The Korn shell
9:
10: kksshh _t_o_k_e_n ...
11:
12: The COHERENT system offers two command interpreters: sshh, the
13: Bourne shell; and kksshh, the Korn shell. sshh is the default
14: COHERENT command interpreter. The shell tutorial included in
15: this manual describes the Bourne shell in detail.
16:
17: This article describes kksshh, the Korn shell. kksshh is a superset of
18: the Bourne shell, and contains many features that you may well
19: find useful. These include MicroEMACS-style editing of command
20: lines; command hashing; a full-featured aliasing feature; and a
21: job-control facility.
22:
23: ***** Invoking ksh *****
24:
25: To invoke kksshh from within the Bourne shell, simply type kksshh at
26: the command-line prompt. To use kksshh as your default shell,
27: instead of sshh, append the command /uussrr/bbiinn/kksshh to the end of your
28: entry in the file /eettcc/ppaasssswwdd. (See the Lexicon entry for ppaasssswwdd
29: for more information on this file.)
30:
31: You can invoke kksshh with one or more built-in options; these are
32: described below.
33:
34: ***** Commands *****
35:
36: A _c_o_m_m_a_n_d consists of one or more _t_o_k_e_n_s. A _t_o_k_e_n is a string of
37: text characters (i.e., one or more alphabetic characters,
38: punctuation marks, and numerals) delineated by spaces, tabs, or
39: newlines.
40:
41: A _s_i_m_p_l_e _c_o_m_m_a_n_d consists of the command's name, followed by zero
42: or more tokens that represent arguments to the command, names of
43: files, or shell operators. A _c_o_m_p_l_e_x _c_o_m_m_a_n_d will use shell
44: constructs to execute one or more commands conditionally. In
45: effect, a complex command is a mini-program that is written in
46: the shell's programming language and interpreted by kksshh.
47:
48: ***** Shell Operators *****
49:
50: The shell includes a number of operators that form pipes,
51: redirect input and output to commands, and let you define
52: conditions under which commands are executed.
53:
54: _c_o_m_m_a_n_d | _c_o_m_m_a_n_d
55: The _p_i_p_e operator: let the output of one command serve as
56: the input to a second. You can combine commands with `|' to
57: form _p_i_p_e_l_i_n_e_s. A pipeline passes the standard output of the
58: first (leftmost) command to the standard input of the second
59: command. For example, in the pipeline
60:
61: sort customers | uniq | more
62:
63:
64: COHERENT Lexicon Page 1
65:
66:
67:
68:
69: ksh Command ksh
70:
71:
72:
73:
74: kksshh invokes ssoorrtt to sort the contents of file ccuussttoommeerrss. It
75: pipes the output of ssoorrtt to the command uunniiqq, which outputs
76: one unique copy of the text that is input into it. kksshh then
77: pipes the output of uunniiqq to the command mmoorree, which displays
78: it on your terminal one screenful at a time. Note that
79: under COHERENT, unlike MS-DOS, pipes are executed
80: concurrently: that is, ssoorrtt does not have to finish its work
81: before uunniiqq and mmoorree can begin to receive input and get to
82: work.
83:
84: _c_o_m_m_a_n_d ; _c_o_m_m_a_n_d
85: Execute commands on a command line sequentially. The
86: command to the left of the `;' executes to completion; then
87: the command to the right of it executes. For example, in
88: the command line
89:
90: a | b ; c | d
91:
92: first execute the pipeline aa | bb then, when aa and bb
93: complete, execute the pipeline cc | dd.
94:
95: _c_o_m_m_a_n_d &
96: Execute a command in the background. This operator must
97: follow the command, not precede it. It prints the process
98: identifier of the command on the standard output, so you can
99: use the kkiillll command to kill that process should something
100: go wrong. This operator lets you execute more than one
101: command simultaneously. For example, the command
102:
103: /etc/fdformat -v /dev/fha0 &
104:
105: formats a high-density, 5.25-inch floppy disk in drive 0
106: (that is, drive A); but while the disk is being formatted,
107: kksshh returns the command line prompt so you can immediately
108: enter another command and begin to work. If you did not use
109: the `&' in this command, you would have to wait until
110: formatting was finished before you could enter another
111: command.
112:
113: kksshh also prints a message on your terminal when a command
114: that you are running in the background finishes processing.
115: It does not check these ``child'' processes very often,
116: however, so a command may have finished some time before kksshh
117: informs you of the fact. See the Lexicon article for the
118: command ppss for information on all processes; also see the
119: description of the built-in command jjoobbss, below.
120:
121: _c_o_m_m_a_n_d && _c_o_m_m_a_n_d
122: Execute a command upon success. kksshh executes the command
123: that follows the token `&&' only if the command that
124: precedes it returns a zero exit status, which signifies
125: success. For example, the command
126:
127: cd /etc
128:
129:
130: COHERENT Lexicon Page 2
131:
132:
133:
134:
135: ksh Command ksh
136:
137:
138:
139: fdformat -v /dev/fha0 && badscan -o proto /dev/fha0 2400
140:
141: formats a floppy disk, as described above. If the format
142: was successful, it then invokes the command bbaaddssccaann to scan
143: the disk for bad blocks; if it was not successful, however,
144: it does nothing.
145:
146: _c_o_m_m_a_n_d || _c_o_m_m_a_n_d
147: Execute a command upon failure. This is identical to
148: operator `&&', except that the second command is executed if
149: the first returns a non-zero status, which signifies
150: failure. For example, the command
151:
152: /etc/fdformat -v /dev/fha0 || echo "Format failed!"
153:
154: formats a floppy disk. If formatting failed, it echoes the
155: message FFoorrmmaatt ffaaiilleedd! on your terminal; however, if
156: formatting succeeds, it does nothing.
157:
158: Note that the tokens newline, `;' and `&' bind less tightly
159: than `&&' and `||'. kksshh parses command lines from left to
160: right if separators bind equally.
161:
162: >_f_i_l_e
163: Redirect standard output. The _s_t_a_n_d_a_r_d _i_n_p_u_t, _s_t_a_n_d_a_r_d
164: _o_u_t_p_u_t, and _s_t_a_n_d_a_r_d _e_r_r_o_r streams are normally connected to
165: the terminal. A pipeline attaches the output of one command
166: to the input of another command. In addition, kksshh includes
167: a set of operators that redirect input and output into files
168: rather than other commands.
169:
170: The operator `>' redirects output into a file. For example,
171: the command
172:
173: sort customers >customers.sort
174:
175: sorts file ccuussttoommeerrss and writes the sorted output into file
176: ccuussttoommeerrss.ssoorrtt. It creates ccuussttoommeerrss.ssoorrtt if it does not
177: exist, and destroys its previous contents if it does exist.
178:
179: >>_f_i_l_e
180: Redirect output into a file, and append. If the file does
181: not exist, this operator creates it; however, if the file
182: already exists, this operator appends the output to that
183: file's contents rather than destroying those contents. For
184: example, the command
185:
186: sort customers.now | uniq >>customers.all
187:
188: sorts file ccuussttoommeerrss.nnooww, pipes its output to command uunniiqq,
189: which throws away duplicate lines of input, and appends the
190: results to file ccuussttoommeerrss.aallll.
191:
192: <_f_i_l_e
193: Redirect input. Here, kksshh reads the contents of a file and
194:
195:
196: COHERENT Lexicon Page 3
197:
198:
199:
200:
201: ksh Command ksh
202:
203:
204:
205: processes them as if you had typed them from your keyboard.
206: For example, the command
207:
208: ed textfile <edit.script
209:
210: invokes the line-editor eedd to edit tteexxttffiillee; however,
211: instead of reading editing commands from your keyboard, the
212: shell passes eedd the contents of eeddiitt.ssccrriipptt. This command
213: would let you prepare an editing script that you could
214: execute repeatedly upon files rather than having to type the
215: same commands over and over.
216:
217: << _t_o_k_e_n
218: Prepare a ``here document''. This operator tells kksshh to
219: accept standard input from the shell input until it reads a
220: line that contains only _t_o_k_e_n. For example, the command
221:
222: cat >FOO <<\!
223: Here is some text.
224: !
225:
226: redirects all text between `<<\!' and `!' to the ccaatt
227: command. The `>' in turn redirects the output of ccaatt into
228: file FFOOOO. kksshh performs parameter substitution on the here
229: document unless the leading _t_o_k_e_n is quoted; parameter
230: substitution and quoting are described below.
231:
232: _c_o_m_m_a_n_d 22> _f_i_l_e
233: Redirect the standard error stream into a file. For
234: example, the command
235:
236: nroff -ms textfile >textfile.p 2>textfile.err
237:
238: invokes the command nnrrooffff to format the contents of
239: tteexxttffiillee. It redirects the output of nnrrooffff (i.e., the
240: standard output) into tteexxttffiillee.pp; it also redirects any
241: error messages that nnrrooffff may generate into file
242: tteexxttffiillee.eerrrr.
243:
244: Note in passing that a command may use up to 20 streams. By
245: default, stream 0 is the standard input; stream 1 is the
246: standard output; and stream 2 is the standard error. kksshh
247: lets you redirect any of these streams individually into
248: files, or combine streams into each other.
249:
250: <&_n kksshh can redirect the standard input and output to duplicate
251: other file descriptors. (See the Lexicon article ffiillee
252: ddeessccrriippttoorr for details on what these are.) This operator
253: duplicates the standard input from file descriptor _n.
254:
255: >&_n Duplicate the standard output from file descriptor _n. For
256: example,
257:
258: 2>&1
259:
260:
261:
262: COHERENT Lexicon Page 4
263:
264:
265:
266:
267: ksh Command ksh
268:
269:
270:
271: redirects file descriptor 2 (the standard error) to file
272: descriptor 1 (the standard output).
273:
274: Note that each command executed as a foreground process inherits
275: the file descriptors and signal traps (described below) of the
276: invoking shell, modified by any specified redirection.
277: Background processes take input from the null device /ddeevv/nnuullll
278: (unless redirected), and ignore interrupt and quit signals.
279:
280: ***** File-Name Patterns *****
281:
282: The shell interprets an input token that contain any of the
283: special characters `?', `*', or `[' as a file name _p_a_t_t_e_r_n.
284:
285: ? Match any single character except newline. For example, the
286: command
287:
288: ls name?
289:
290: will print the name of any file that consists of the string
291: nnaammee plus any one character. If nnaammee is followed by no
292: characters, or is followed by two or more characters, it will
293: not be printed.
294:
295: * Match a string of non-newline characters of any length
296: (including zero).
297:
298: ls name*
299:
300: will print the name of any file that begins with the string
301: nnaammee, regardless of whether it is followed by any other
302: characters. Likewise, the command
303:
304: ls name?*
305:
306: will print the name of any file that consists of the string
307: nnaammee followed by at least one character. Unlike nnaammee*, the
308: token nnaammee?* insists that be followed by at least one
309: character before it will be printed.
310:
311: ~_n_a_m_e
312: Replace the name of user _n_a_m_e with his $HHOOMMEE directory. For
313: example, the command
314:
315: ls -l ~norm/src
316:
317: lists the contents of the _s_r_c subdirectory located under the
318: $HHOOMMEE directory for user nnoorrmm. This spares you from having to
319: know where a given user's HOME directory is located.
320:
321: [_C-_c]
322: Enclose alternatives to match a single character. A hyphen `-
323: ' indicates a range of characters. For example, the command
324:
325: ls name[ABC]
326:
327:
328: COHERENT Lexicon Page 5
329:
330:
331:
332:
333: ksh Command ksh
334:
335:
336:
337:
338: will print the names of files nnaammeeAA, nnaammeeBB, and nnaammeeCC
339: (assuming, of course, that those files exist in the current
340: directory). The command
341:
342: ls name[A-K]
343:
344: prints the names of files nnaammeeAA through nnaammeeKK (again, assuming
345: that they exist in the current directory).
346:
347: When kksshh reads a token that contains one of the above characters,
348: it replaces the token in the command line with an alphabetized
349: list of file names that match the pattern. If it finds no
350: matches, it passes the token unchanged to the command. For
351: example, when you enter the command
352:
353:
354: ls name[ABC]
355:
356:
357: kksshh replaces the token nnaammee[AABBCC] with nnaammeeAA, nnaammeeBB, and nnaammeeCC
358: (again, if they exist in the current directory), so the command
359: now reads:
360:
361:
362: ls nameA nameB nameC
363:
364:
365: It then passes this second, transformed version of the command
366: line to the command llss.
367:
368: Note that the slash `/' and leading period `.' must be matched
369: explicitly in a pattern. The slash, of course, separates the
370: elements of a path name; while a period at the begin of a file
371: name usually (but not always) indicates that that file has
372: special significance.
373:
374: ***** Quoting Text *****
375:
376: From time to time, you will want to ``turn off'' the special
377: meaning of characters. For example, you may wish to pass a token
378: that contains a literal asterisk to a command; to do so, you need
379: a way to tell kksshh not to expand the token into a list of file
380: names. Therefore, kksshh includes the qquuoottaattiioonn ooppeerraattoorrss `\', `"',
381: and `''; these ``turn off'' (or _q_u_o_t_e) the special meaning of
382: operators.
383:
384: The backslash `\' quotes the following character. For example,
385: the command
386:
387:
388:
389:
390:
391:
392:
393:
394: COHERENT Lexicon Page 6
395:
396:
397:
398:
399: ksh Command ksh
400:
401:
402:
403: ls name\*
404:
405:
406: lists a file named nnaammee*, and no other.
407:
408: The shell ignores a backslash immediately followed by a newline,
409: called a _c_o_n_c_e_a_l_e_d _n_e_w_l_i_n_e. This lets you give more arguments to
410: a command than will fit on one line. For example, the command
411:
412:
413: cc -o output file1.c file2.c file3.c \
414: file4.c file5.c file19.c
415:
416:
417: invokes the C compiler cccc to compile a set of C source files, the
418: names of which extend over more than one line of input. You will
419: find this to be extremely helpful, especially when you write
420: scripts and mmaakkeeffiillees, to help you write neat, easily read
421: commands.
422:
423: A pair of apostrophes ' ' prevents interpretation of any enclosed
424: special characters. For example, the command
425:
426:
427: find . -name '*.c' -print
428:
429:
430: finds and prints the name of any C-source file in the current
431: directory and any subdirectory. The command ffiinndd interprets the
432: `*' internally; therefore, you want to suppress the shell's
433: expansion of that operator, which is accomplished by enclosing
434: that token between apostrophes.
435:
436: A pair of quotation marks " " has the same effect. Unlike
437: apostrophes, however, kksshh will perform parameter substitution and
438: command-output substitution (described below) within quotation
439: marks. Note that everything between quotation marks will be a
440: single argument, even if there are spaces between the tokens.
441: For example, the command
442:
443:
444: grep "x y" *.c
445:
446:
447: calls the string-search command ggrreepp to look for the string
448: xx<ssppaaccee>yy.
449:
450: ***** Scripts *****
451:
452: Shell commands can be stored in a file, or _s_c_r_i_p_t. The command
453:
454:
455:
456:
457:
458:
459:
460: COHERENT Lexicon Page 7
461:
462:
463:
464:
465: ksh Command ksh
466:
467:
468:
469: ksh _s_c_r_i_p_t [ _p_a_r_a_m_e_t_e_r ... ]
470:
471:
472: executes the commands in _s_c_r_i_p_t with a new subshell kksshh. Each
473: _p_a_r_a_m_e_t_e_r is a value for a positional parameter, as described
474: below. If you have used the command cchhmmoodd to make _s_c_r_i_p_t
475: executable, you may omit the kksshh command.
476:
477: Parameters of the form `$_n' represent command-line arguments
478: within a script. _n can range from zero through nine; $00 always
479: gives the name of the script. These parameters are also called
480: _p_o_s_i_t_i_o_n_a_l _p_a_r_a_m_e_t_e_r_s.
481:
482: If no corresponding parameter is given on the command line, the
483: shell substitutes the null string for that parameter. For
484: example, if the script ffoorrmmaatt contains the following line:
485:
486:
487: nroff -ms $1 >$1.out
488:
489:
490: then invoking ffoorrmmaatt with the command line:
491:
492:
493: format mytext
494:
495:
496: invokes the command nnrrooffff to format the contents of mmyytteexxtt, and
497: writes the output into file mmyytteexxtt.oouutt. If, however, you invoke
498: this command with the command line
499:
500:
501: format mytext yourtext
502:
503:
504: the script will format mmyytteexxtt but ignore yyoouurrtteexxtt altogether.
505:
506: Reference $* represents all command-line arguments. If, for
507: example, we change the contents of script ffoorrmmaatt to read
508:
509:
510: nroff -ms $* >$1.out
511:
512:
513: then the command
514:
515:
516: format mytext yourtext
517:
518:
519: will invoke nnrrooffff to format the contents of mmyytteexxtt and yyoouurrtteexxtt,
520: and write the output into file mmyytteexxtt.oouutt.
521:
522: Commands in a script can also be executed with the . (dot)
523: command. It resembles the kksshh command, but the current shell
524:
525:
526: COHERENT Lexicon Page 8
527:
528:
529:
530:
531: ksh Command ksh
532:
533:
534:
535: executes the script commands without creating a new subshell or a
536: new environment; therefore, you cannot use command-line
537: arguments.
538:
539: ***** Variables *****
540:
541: Shell variables are names that can be assigned string values on a
542: command line, in the form
543:
544:
545: _n_a_m_e=_v_a_l_u_e
546:
547:
548: The name must begin with a letter, and can contain letters,
549: digits, and underscores `_'. In shell input, `$_n_a_m_e' or
550: `${_n_a_m_e}' represents the value of the variable. For example:
551:
552:
553: TEXT=mytext
554:
555: nroff -ms $TEXT >$TEXT.out
556:
557:
558: Here, kksshh expands $TTEEXXTT before it executes the nnrrooffff command.
559: This technique is very useful in large, complex scripts: by using
560: variables, you can change the behavior of the script by editing
561: one line, rather than having to edit numerous variables
562: throughout the script.
563:
564: Note that if an assignment precedes a command on the same command
565: line, the effect of the assignment is local to that command;
566: otherwise, the effect is permanent. For example,
567:
568:
569: kp=one testproc
570:
571:
572: assigns variable kkpp the value oonnee only for the execution of the
573: script tteessttpprroocc.
574:
575: kksshh sets the following variables by default:
576:
577: # The number of actual positional parameters given to the
578: current command.
579:
580: @ The list of positional parameters ``$1 $2 ...''.
581:
582: * The list of positional parameters ``$1'' ``$2'' ... (the same
583: as `$@' unless some parameters are quoted).
584:
585: - Options set in the invocation of the shell or by the sseett
586: command.
587:
588: ? The exit status returned by the last command.
589:
590:
591:
592: COHERENT Lexicon Page 9
593:
594:
595:
596:
597: ksh Command ksh
598:
599:
600:
601: ! The process number of the last command invoked with `&'.
602:
603: $ The process number of the current shell.
604:
605: ***** Environmental Variables *****
606:
607: kksshh references the following environmental variables:
608:
609: CCWWDD Current working directory: this is the name of the
610: directory in which you are now working.
611:
612: EENNVV If this variable is set at start-up, after all pprrooffiillee
613: files have been executed, the expanded value is used as
614: the shell's start-up file. It typically defines
615: functions and aliases.
616:
617: FFCCEEDDIITT This sets the editor used by the command ffcc.
618:
619: HHOOMMEE Initial working directory; usually specified in the
620: password file /eettcc/ppaasssswwdd.
621:
622: IIFFSS Delimiters for tokens; by default space, tab, and
623: newline.
624:
625: KKSSHH_VVEERRSSIIOONN
626: The current version of the Korn shell that you are using.
627:
628: MMAAIILL Checked at intervals specified by environmental variable
629: MMAAIILLCCHHEECCKK. If file specified by this variable is new
630: since last checked, the shell prints ``You have mail.''
631: on the user's terminal. If the file has increased in
632: size since the last check, the shell prints ``You have
633: new mail.'' on the user's terminal.
634:
635: MMAAIILLCCHHEECCKK
636: Specifies the number of seconds between checking for new
637: mail. If not specified, MMAAIILLCCHHEECCKK defaults to 60
638: seconds.
639:
640: OOLLDDPPWWDD The prior working directory, if any.
641:
642: PPAATTHH Colon-separated list of directories searched for
643: commands.
644:
645: PPSS11 First prompt string, usually `$'. Note that in this
646: variable and PPSS22, kksshh expands the symbol ! into the
647: current number of the command line. For example, the
648: prompt kksshh !> prints the prompt kksshh _N_N> with every
649: command, where _N_N is the number of the current command.
650: This is useful when you have enabled the history feature,
651: as described below.
652:
653: PPSS22 Second prompt string, usually `>'. kksshh prints it when it
654: expects more input, such as when an open quotation-mark
655: has been typed but a close quotation-mark has not been
656:
657:
658: COHERENT Lexicon Page 10
659:
660:
661:
662:
663: ksh Command ksh
664:
665:
666:
667: typed, or within a shell construct.
668:
669: PPWWDD The present working directory, i.e., the directory within
670: which you are now working.
671:
672: SSEECCOONNDDSS
673: The number of seconds since the current shell was
674: started.
675:
676: SSHHEELLLL The full path name of the shell that you are now
677: executing.
678:
679: TTEERRMM The name of the type of terminal you are now using, as
680: used by various programs for reading the file
681: /eettcc/tteerrmmccaapp.
682:
683: TTIIMMEEZZOONNEE
684: The current timezone you are located in, as set in your
685: .pprrooffiillee. This is an interesting and powerful variable;
686: see its entry in the Lexicon for details.
687:
688: UUSSEERR The login-identifier of the user, i.e., you.
689:
690: The following special forms substitute parameters conditionally:
691:
692: ${_n_a_m_e-_t_o_k_e_n}
693: Substitite _n_a_m_e if it is set; if it is not, substitute
694: _t_o_k_e_n.
695:
696: ${_n_a_m_e=_t_o_k_e_n}
697: Substitute _n_a_m_e if it is set; if it is not set, substitute
698: _t_o_k_e_n and set _n_a_m_e to equal _t_o_k_e_n.
699:
700: ${_n_a_m_e+_t_o_k_e_n}
701: Substitute _t_o_k_e_n if _n_a_m_e is set.
702:
703: ${_n_a_m_e?_t_o_k_e_n}
704: Substitute _n_a_m_e if it is set; if it is not, print _t_o_k_e_n and
705: exit from the shell.
706:
707: ***** Command Output Substitution *****
708:
709: kksshh can use the output of a command as shell input (as command
710: arguments, for example) by enclosing the command in grave
711: characters ` `. For example, to list the contents of the
712: directories named in file ddiirrss, use the command
713:
714:
715: ls -l `cat dirs`
716:
717:
718: ***** Constructs *****
719:
720: kksshh lets you control the execution of programs through the
721: following constructs. It recognizes a construct only if it
722:
723:
724: COHERENT Lexicon Page 11
725:
726:
727:
728:
729: ksh Command ksh
730:
731:
732:
733: occurs unquoted as the first token of a command. This implies
734: that a separator must precede each reserved word in the following
735: constructs; for example, newline or `;' must precede ddoo in the
736: ffoorr construct.
737:
738: bbrreeaakk [_n]
739: Exit from ffoorr, uunnttiill, or wwhhiillee. If _n is given, exit from _n
740: levels.
741:
742: ccaassee _t_o_k_e_n iinn [ _p_a_t_t_e_r_n [ | _p_a_t_t_e_r_n ] ...) _s_e_q_u_e_n_c_e;; ] ... eessaacc
743: Check _t_o_k_e_n against each _p_a_t_t_e_r_n, and execute _s_e_q_u_e_n_c_e
744: associated with the first matching _p_a_t_t_e_r_n.
745:
746: ccoonnttiinnuuee [_n]
747: Branch to the end of the _nth enclosing ffoorr, uunnttiill, or wwhhiillee
748: construct.
749:
750: ffoorr _n_a_m_e [ iinn _t_o_k_e_n ... ] ddoo _s_e_q_u_e_n_c_e ddoonnee
751: Execute _s_e_q_u_e_n_c_e once for each _t_o_k_e_n. On each iteration,
752: _n_a_m_e takes the value of the next _t_o_k_e_n. If the iinn clause is
753: omitted, $@ is assumed. For example, to list all files
754: ending with .cc:
755:
756: for i in *.c
757: do
758: cat $i
759: done
760:
761:
762: iiff _s_e_q_1 tthheenn _s_e_q_2 [ eelliiff _s_e_q_3 tthheenn _s_e_q_4 ] ... [ eellssee _s_e_q_5 ] ffii
763: Execute _s_e_q_1. If the exit status is zero, execute _s_e_q_2; if
764: not, execute the optional _s_e_q_3 if given. If the exit status
765: of _s_e_q_3 is zero, then execute _s_e_q_4, and so on. If the exit
766: status of all tested sequences is nonzero, execute _s_e_q_5.
767:
768: ttiimmee _s_e_q_u_e_n_c_e
769: Time how long it takes _s_e_q_u_e_n_c_e to execute. When _s_e_q_u_e_n_c_e
770: has finished exeucting, the time is displayed on the
771: standard output.
772:
773: wwhhiillee _s_e_q_u_e_n_c_e_1 [ ddoo _s_e_q_u_e_n_c_e_2 ] ddoonnee
774: Execute _s_e_q_u_e_n_c_e_2 as long as the execution of _s_e_q_u_e_n_c_e_1
775: results in an exit status of zero.
776:
777: (_s_e_q_u_e_n_c_e)
778: Execute _s_e_q_u_e_n_c_e within a subshell. This allows _s_e_q_u_e_n_c_e to
779: change the current directory, for example, and not affect
780: the enclosing environment.
781:
782: {_s_e_q_u_e_n_c_e}
783: Braces simply enclose a _s_e_q_u_e_n_c_e.
784:
785: ***** Built-in Commands *****
786:
787: kksshh executes most commands via the ffoorrkk system call, which
788:
789:
790: COHERENT Lexicon Page 12
791:
792:
793:
794:
795: ksh Command ksh
796:
797:
798:
799: creates a new process. See the Lexicon articles on ffoorrkk() and
800: eexxeecc for details on these calls. kksshh also has the following
801: commands built into itself.
802:
803: . _s_c_r_i_p_t
804: Read and execute commands from _s_c_r_i_p_t. Positional parameters
805: are not allowed. kksshh searches the directories named in the
806: environmental variable PPAATTHH to find the given _s_c_r_i_p_t.
807:
808: : [_t_o_k_e_n ...]
809: A colon `:' indicates a ``partial comment''. kksshh normally
810: ignores all commands on a line that begins with a colon,
811: except for redirection and such symbols as $, {, ?, etc.
812:
813: # A complete comment: if # is the first character on a line,
814: kksshh ignores all text that follows on that line.
815:
816: aalliiaass [-dd] [_n_a_m_e=_v_a_l_u_e ...]
817: When called without arguments, aalliiaass prints all aliases and
818: their values. When called with a _n_a_m_e but no associated
819: value, then it prints the value of _n_a_m_e. When called with a
820: _n_a_m_e and _v_a_l_u_e combination, it associated _v_a_l_u_e with _n_a_m_e.
821:
822: For example, the command
823:
824: alias logout='exit'
825:
826: binds the token llooggoouutt to the command eexxiitt: hereafter,
827: whenever you type llooggoouutt, it will be as if you typed the
828: eexxiitt command.
829:
830: The -dd option creates an alias for a directory.
831:
832: kksshh has a number of aliases set by default. See the section
833: AAlliiaasseess, below, for details.
834:
835: bbiinndd [-mm] [_k_e_y__s_e_q_u_e_n_c_e=_b_i_n_d_i_n_g__n_a_m_e ...]
836: When called without arguments, list the current set of key
837: bindings for MicroEMACS-style editing of command lines.
838: When called with arguments, bind the _k_e_y__s_e_q_u_e_n_c_e to
839: _b_i_n_d_i_n_g__n_a_m_e.
840:
841: For example, the command
842:
843: bind '^[^H'=delete-word-backward
844:
845: binds the editing command ddeelleettee-wwoorrdd-bbaacckkwwaarrdd to the key
846: sequence <eesscc><bbaacckkssppaaccee>. Note that the carat characters
847: in this command are literally that, not the shell's
848: representation of a literal <eesscc> or <bbaacckkssppaaccee> character.
849:
850: When called with the -mm option, bind more than one
851: _b_i_n_d_i_n_g__n_a_m_e to a given _k_e_y__s_e_q_u_e_n_c_e. This lets you build
852: keyboard macros, to perform complex editing tasks with one
853: or two keystrokes.
854:
855:
856: COHERENT Lexicon Page 13
857:
858:
859:
860:
861: ksh Command ksh
862:
863:
864:
865:
866: See the section on CCoommmmaanndd-lliinnee EEddiittiinngg, below, for details.
867:
868: bbuuiillttiinn _c_o_m_m_a_n_d
869: Execute _c_o_m_m_a_n_d as a built-in command.
870:
871: ccdd _d_i_r
872: Change the working directory to _d_i_r. If no argument is
873: given, change to the home directory as set by the
874: environmental variable HHOOMMEE. When invoked, it also changes
875: the environmental variables PPWWDD and OOLLDDPPWWDD.
876:
877: Using a hyphen `-' as the argument causes kksshh to change to
878: the previous directory, i.e., the one indicated by shell
879: variable OOLLDDPPWWDD. In effect, this swaps OOLLDDPPWWDD and PPWWDD, thus
880: allowing you to flop back and forth easily between two
881: directories.
882:
883: eecchhoo _t_o_k_e_n ...
884: Echo _t_o_k_e_n onto the standard output. kksshh replaces the
885: command eecchhoo with the alias eecchhoo='pprriinntt'.
886:
887: eevvaall [_t_o_k_e_n ...]
888: Evaluate each _t_o_k_e_n and treat the result as shell input.
889:
890: eexxeecc [_c_o_m_m_a_n_d]
891: Execute _c_o_m_m_a_n_d directly rather than as a subprocess. This
892: terminates the current shell.
893:
894: eexxiitt [_s_t_a_t_u_s]
895: Set the exit status to _s_t_a_t_u_s, if given, then terminate;
896: otherwise, the previous status is used.
897:
898: eexxppoorrtt [_n_a_m_e ...]
899: kksshh executes each command in an _e_n_v_i_r_o_n_m_e_n_t, which is
900: essentially a set of shell variable names and corresponding
901: string values. It inherits an environment when invoked, and
902: normally it passes the same environment to each command it
903: invokes. eexxppoorrtt specifies that the shell should pass the
904: modified value of each given _n_a_m_e to the environment of
905: subsequent commands. When no _n_a_m_e is given, kksshh prints the
906: name of each variable marked for export.
907:
908: ffcc [-ll] [-nn] [_f_i_r_s_t [_l_a_s_t]]
909: Draw the previously executed commands _f_i_r_s_t through _l_a_s_t
910: back for manipulation and possible execution. _f_i_r_s_t and
911: _l_a_s_t can be referenced either by their history numbers, or
912: by a string with which the command in question begins.
913: Normally, the commands are pulled into an editor for
914: manipulation before they are executed; the editor is defined
915: by the environmental variable FFCCEEDDIITT (default, eedd). The
916: commands in question are executed as soon as you exit from
917: the editor. Option -ll lists the command(s) on ssttddoouutt, and
918: so suppresses the editing feature. Option -nn inhibits the
919: default history numbers.
920:
921:
922: COHERENT Lexicon Page 14
923:
924:
925:
926:
927: ksh Command ksh
928:
929:
930:
931:
932: ffcc -ss [_o_l_d=_n_e_w] [_c_o_m_m_a_n_d]
933: Re-execute _c_o_m_m_a_n_d after substituting string _n_e_w for _o_l_d.
934:
935: ggeettooppttss _o_p_t_s_t_r_i_n_g _n_a_m_e [_a_r_g ...]
936: Parse the _a_r_gs to See the Lexicon entry for ggeettooppttss for
937: details.
938:
939: hhaasshh [-rr] [_n_a_m_e ...]
940: When called without arguments, hhaasshh lists the path names of
941: all hashed commands. When called with _n_a_m_e hhaasshh check to
942: see if it is an executable command, and if so adds it to the
943: shell's hash list. The -rr option removes _n_a_m_e from the hash
944: list.
945:
946: kkiillll [-ll] [_s_i_g_n_a_l] _p_r_o_c_e_s_s ...
947: Send _s_i_g_n_a_l to _p_r_o_c_e_s_s. The default signal is TTEERRMM, which
948: terminates the process. _s_i_g_n_a_l may either be a number or a
949: mnemonic as #ddeeffiinneed in header file <ssiiggnnaall.hh>. When called
950: with the -ll option, it lists all known types of signals.
951: See the Lexicon entry for kkiillll for details.
952:
953: lleett [_e_x_p_r_e_s_s_i_o_n]
954: Evaluate each _e_x_p_r_e_s_s_i_o_n. This command returns zero if
955: _e_x_p_r_e_s_s_i_o_n evaluates to non-zero (i.e., fails), and returns
956: non-zero if it evalutes to zero (i.e., succeeds). This is
957: useful for evaluating expressions before actually executing
958: them.
959:
960: pprriinntt [-nnrreeuu_n] [_a_r_g_u_m_e_n_t ...]
961: Print each _a_r_g_u_m_e_n_t on the standard output, separated by
962: spaces and terminated with a newline. Option -nn suppresses
963: printing of the newline. Option -uu_n redirects output from
964: the standard output to file descriptor _n.
965:
966: Note that each _a_r_g_u_m_e_n_t can contain the following standard C
967: escape characters: \bb, \ff, \nn, \rr, \vv, and \###. See the
968: Lexicon article on CC LLaanngguuaaggee for details each character's
969: meaning. The option -rr inhibits this feature, and the -ee
970: option re-enables it.
971:
972: rreeaadd _n_a_m_e ...
973: Read a line from the standard input and assign each token of
974: the input to the corresponding shell variable _n_a_m_e. If the
975: input contains fewer tokens than the _n_a_m_e list, assign the
976: null string to extra variables. If the input contains more
977: tokens, assign the last _n_a_m_e the remainder of the input.
978:
979: rreeaaddoonnllyy [_n_a_m_e ...]
980: Mark each shell variable _n_a_m_e as a read-only variable.
981: Subsequent assignments to read-only variables will not be
982: permitted. With no arguments, print the name and value of
983: each read-only variable.
984:
985:
986:
987:
988: COHERENT Lexicon Page 15
989:
990:
991:
992:
993: ksh Command ksh
994:
995:
996:
997: rreettuurrnn [_s_t_a_t_u_s]
998: Return _s_t_a_t_u_s to the parent process.
999:
1000: sseett [-aaeeffhhkkmmnnuuvvxx [-oo _k_e_y_w_o_r_d] [_n_a_m_e ...] ]
1001: Set listed flag. The -oo option sets _k_e_y_w_o_r_d, where _k_e_y_w_o_r_d
1002: is a shell option.
1003:
1004: When used with one or more _n_a_m_e_s, this command sets shell
1005: variables _n_a_m_e to values of positional parameters beginning
1006: with $11.
1007:
1008: For example, the command
1009:
1010: set -h -o emacs ignoreeof
1011:
1012: performs the following: turns on hashing for all commands,
1013: turns on MicroEMACS-style command-line editing, and turns
1014: off exiting upon EOF (that is, you must type eexxiitt to exit
1015: from the shell). sseett commands are especially useful when
1016: embedded in your .pprrooffiillee, where they can customize kksshh to
1017: your preferences.
1018:
1019: For details of this command, see its Lexicon entry.
1020:
1021: sshhiifftt
1022: Rename positional parameter 11 to current value of $22, and so
1023: on.
1024:
1025: tteesstt [_o_p_t_i_o_n] [_e_x_p_r_e_s_s_i_o_n]
1026: Check _e_x_p_r_e_s_s_i_o_n for condition _o_p_t_i_o_n. This is a useful and
1027: complex command, with more options than can be listed here.
1028: See its Lexicon entry for details.
1029:
1030: ttiimmeess
1031: Print on the standard output a summary of processing time
1032: used by the current shell and all of its child processes.
1033:
1034: ttrraapp [_c_o_m_m_a_n_d] [_n ...]
1035: Execute _c_o_m_m_a_n_d if kksshh receives signal _n. If _c_o_m_m_a_n_d is
1036: omitted, reset traps to original values. To ignore a
1037: signal, pass null string as _c_o_m_m_a_n_d. With _n zero, execute
1038: _c_o_m_m_a_n_d when the shell exits. With no arguments, print the
1039: current trap settings.
1040:
1041: ttyyppeesseett [-ffiirrxx] [+ffiirrxx] [_n_a_m_e [=_v_a_l_u_e] ... ]
1042: When called without an argument, this command lists all
1043: variables and their attributes.
1044:
1045: When called with an option but without a _n_a_m_e, it lists all
1046: variables that have the specified attribute; - tells ttyyppeesseett
1047: to list the value of each variable and + tells it not to.
1048:
1049: When called with one or more _n_a_m_e_s, it gives _n_a_m_e to the
1050: listed attribute. If _n_a_m_e is associated with a _v_a_l_u_e,
1051: ttyyppeesseett also assigns the _v_a_l_u_e to it.
1052:
1053:
1054: COHERENT Lexicon Page 16
1055:
1056:
1057:
1058:
1059: ksh Command ksh
1060:
1061:
1062:
1063:
1064: ttyyppeesseett recognizes the following attributes:
1065:
1066: -ii Store variable's value as an integer
1067: -ff List function instead of variable
1068: -rr Make the variable read-only
1069: -xx Export variable to the environment
1070:
1071: uummaasskk [_n_n_n]
1072: Set user file creation mask to _n_n_n. If no argument is given,
1073: print the current file creation mask.
1074:
1075: uunnaalliiaass [-dd] _n_a_m_e ...
1076: Remove the alias for each _n_a_m_e. The -dd option unaliases an
1077: alias for a directory.
1078:
1079: wwaaiitt [_p_i_d]
1080: Hold execution of further commands until process _p_i_d
1081: terminates. If _p_i_d is omitted, wait for all child
1082: processes. If no children are active, this command finishes
1083: immediately.
1084:
1085: wwhheennccee [-vv] _n_a_m_e ...
1086: List the type of command for each _n_a_m_e. When called with the
1087: -vv option, also list functions and aliases.
1088:
1089: ***** Aliases *****
1090:
1091: kksshh implements as aliases a number of commands that sshh calls as
1092: separate executable programs. The eecchhoo alias, for instance, does
1093: everything that /bbiinn/eecchhoo does, but kksshh does not have to ffoorrkk()
1094: and eexxeecc() simply to echo a token. Other aliases, like ppwwdd, work
1095: by printing the contents of shell variables. The command
1096: /bbiinn/ppwwdd still works should you prefer it, but you must request
1097: it by its full path name should you not wish to use the much
1098: faster alias version.
1099:
1100: kksshh sets the following aliases by default. If you wish, you can
1101: use the built-in command uunnaalliiaass to make one or all of them go
1102: away.
1103:
1104: eecchhoo=pprriinntt
1105: ffaallssee=lleett
1106: ffuunnccttiioonnss=ttyyppeesseett -ff
1107: hhiissttoorryy=ffcc -ll
1108: iinntteeggeerr=ttyyppeesseett -ii
1109: llooggiinn=eexxeecc llooggiinn
1110: nneewwggrrpp=eexxeecc nneewwggrrpp
1111: ppwwdd=pprriinntt -rr $PPWWDD
1112: rr=ffcc -ss
1113: ttrruuee=:
1114: ttyyppee=wwhheennccee -vv
1115:
1116:
1117:
1118:
1119:
1120: COHERENT Lexicon Page 17
1121:
1122:
1123:
1124:
1125: ksh Command ksh
1126:
1127:
1128:
1129: ***** Job Control *****
1130:
1131: kksshh lets you manipulate and monitor background jobs via its _j_o_b
1132: _c_o_n_t_r_o_l commands.
1133:
1134: The following commands manipulate background jobs:
1135:
1136: jjoobbss Display information about all controlled jobs. Information
1137: is in the following format:
1138:
1139: %_n_u_m [+-] _p_i_d _s_t_a_t_u_s _c_o_m_m_a_n_d
1140:
1141: where _n_u_m indicates the job number, `+' indicates the
1142: current job, `-' indicates the previous job, _p_i_d is the
1143: job's process identifier, _s_t_a_t_u_s shows the status of the job
1144: (e.g., Running, Done, Killed), and _c_o_m_m_a_n_d is the command
1145: description. Note that kksshh only checks for changes in job
1146: status when waiting for a command to complete.
1147:
1148: kkiillll [-_s_i_g_n_a_l] _p_i_d ...
1149: Described above.
1150:
1151: wwaaiitt [_p_i_d]
1152: Hold execution of further commands until process _p_i_d
1153: terminates. See its Lexicon entry for details.
1154:
1155: The following `%' syntax can be used with the above commands:
1156:
1157: %+ Select the current job.
1158:
1159: %- Select the previous job.
1160:
1161: %_n_u_m Select the job with job number _n_u_m.
1162:
1163: %_s_t_r_i_n_g
1164: Select the most recently invoked job whose command begins
1165: with _s_t_r_i_n_g.
1166:
1167: %?_s_t_r_i_n_g
1168: Select the most recently invoked job whose command contains
1169: _s_t_r_i_n_g.
1170:
1171: ***** Command-line Editing *****
1172:
1173: One of the most useful features of kksshh is its ability to remember
1174: commands that you have typed previously. You can interactively
1175: edit previously issued commands and re-issue them with just a few
1176: keystrokes.
1177:
1178: You can recall commands and edit them using the ffcc command,
1179: described above. kksshh, however, also has built into it a
1180: MicroEMACS editing feature that lets you recall and edit commands
1181: using MicroEMACS-style editing commands. When you have finished
1182: editing, simply typing <eenntteerr> dispatches the command for re-
1183: execution.
1184:
1185:
1186: COHERENT Lexicon Page 18
1187:
1188:
1189:
1190:
1191: ksh Command ksh
1192:
1193:
1194:
1195:
1196: To turn on MicroEMACS editing, use the command
1197:
1198:
1199: set -o emacs
1200:
1201:
1202: The following table gives each editing command and its default
1203: keybinding. Note that you can replace any of the following
1204: keybindings by using the bbiinndd command, described above. Note,
1205: too, that not every command has a default keybinding. Those that
1206: do not have one are marked ``None''.
1207:
1208: aabboorrtt (<ccttrrll-GG>)
1209: Abort the current input line or function.
1210:
1211: aauuttoo-iinnsseerrtt
1212: Insert text into the command line. This is the default for
1213: almost every key.
1214:
1215: bbaacckkwwaarrdd-cchhaarr (<ccttrrll-BB>)
1216: Move the cursor one character to the left.
1217:
1218: bbaacckkwwaarrdd-wwoorrdd (<eesscc>BB)
1219: Move the cursor one word to the left. A wwoorrdd is defined as
1220: any cluster of characters delineated by any of the
1221: characters named in the environmental variable IIFFSS: by
1222: default, <ssppaaccee>, <ttaabb>, and <nneewwlliinnee>.
1223:
1224: bbeeggiinnnniinngg-ooff-lliinnee (<ccttrrll-AA>)
1225: Move the cursor to the leftmost position (i.e., the
1226: beginning) of the line.
1227:
1228: ccoommpplleettee (<eesscc><eesscc>)
1229: Complete as much as is unique of the hashed command name or
1230: file name in which the cursor is positioned. If no unique
1231: command or file name is found, kksshh beeps. Note that this
1232: command does nothing unless you have used the sseett command to
1233: turn on hashing.
1234:
1235: ccoommpplleettee-ccoommmmaanndd (<ccttrrll-XX><eesscc>)
1236: Automatically complete as much as is unique of the hashed
1237: command name. Like the ccoommpplleettee command, above, except that
1238: file names are not expanded.
1239:
1240: ccoommpplleettee-ffiillee (<ccttrrll-XX><ccttrrll-XX>)
1241: Automatically complete as much as is unique of the file
1242: name. Like the ccoommpplleettee command, above, except that
1243: commands are not expanded.
1244:
1245: ddeelleettee-cchhaarr-bbaacckkwwaarrdd (<ccttrrll-HH>)
1246: Delete the character to the left of the cursor. Shift text
1247: to the left to fill the gap left by the deleted character.
1248:
1249:
1250:
1251:
1252: COHERENT Lexicon Page 19
1253:
1254:
1255:
1256:
1257: ksh Command ksh
1258:
1259:
1260:
1261: ddeelleettee-cchhaarr-ffoorrwwaarrdd (<ccttrrll-DD>)
1262: Delete the character upon which the cursor is positioned.
1263: Shift text to the left to fill the gap left by the deleted
1264: character.
1265:
1266: ddeelleettee-wwoorrdd-bbaacckkwwaarrdd (<ccttrrll-WW>)
1267: Delete the word to the left of the cursor. Shift text to
1268: the left to fill the gap left by the deleted word.
1269:
1270: ddeelleettee-wwoorrdd-ffoorrwwaarrdd (<eesscc>DD)
1271: Delete the word to the right of the cursor. Shift text to
1272: the left to fill the gap left by the deleted word.
1273:
1274: ddoowwnn-hhiissttoorryy (<ccttrrll-NN>)
1275: Scroll to the next command in the history buffer, if any.
1276:
1277: eenndd-ooff-lliinnee (<ccttrrll-EE>)
1278: Move the cursor to the rightmost position (i.e., the end) of
1279: the line.
1280:
1281: eeoott (<ccttrrll-_>)
1282: Send an EOT (end of transmission) signal to the shell.
1283: Normally, this is sent by <ccttrrll-DD>, but MicroEMACS mode
1284: binds this keystroke to an editing command.
1285:
1286: ffoorrwwaarrdd-cchhaarr (<ccttrrll-FF>)
1287: Move the cursor one character to the right.
1288:
1289: ffoorrwwaarrdd-wwoorrdd (<eesscc>FF)
1290: Move the cursor one word to the right.
1291:
1292: kkiillll-lliinnee (<ccttrrll-UU>)
1293: Delete (i.e., erase) this entire input line.
1294:
1295: kkiillll-ttoo-eeooll (<ccttrrll-KK>)
1296: Kill the input line from where the cursor is positioned to
1297: the end of the line.
1298:
1299: lliisstt (<eesscc>?)
1300: Display a sorted listed of all hashed commands and file
1301: names that have been entered so far, and so lists the tokens
1302: that can be expanded with the ccoommpplleettee commands, described
1303: above.
1304:
1305: lliisstt-ccoommmmaanndd (<ccttrrll-XX>?)
1306: List all hashed commands.
1307:
1308: lliisstt-ffiillee (none)
1309: List all files used in hashed commands so far.
1310:
1311: nneewwlliinnee (<ccttrrll-JJ> or <ccttrrll-MM>)
1312: Dispatch the current line to the shell for execution. The
1313: cursor need not be at the beginning or end of the line for
1314: this command to work correctly.
1315:
1316:
1317:
1318: COHERENT Lexicon Page 20
1319:
1320:
1321:
1322:
1323: ksh Command ksh
1324:
1325:
1326:
1327: pprreeffiixx-11 (<eesscc>)
1328: Introduce a two-character command sequence.
1329:
1330: pprreeffiixx-22 (<ccttrrll-XX>)
1331: Introduce a two-character command sequence.
1332:
1333: qquuoottee (<ccttrrll-^>)
1334: Read the following character literally, rather than as an
1335: editing command.
1336:
1337: rreeddrraaww (<ccttrrll-LL>)
1338: Redisplay the prompt and the current command line. This is
1339: useful if the line is garbled due to, say, line noise when
1340: you are using a modem.
1341:
1342: sseeaarrcchh-cchhaarraacctteerr (<ccttrrll-]>)
1343: Search forward in the current command line for the next
1344: character typed.
1345:
1346: sseeaarrcchh-hhiissttoorryy (<ccttrrll-RR>)
1347: Enter incremental-search mode and search backwards through
1348: the history buffer. aabboorrtt aborts search and returns you to
1349: the line from which you began the search; <eesscc> ends
1350: searching and leaves you in the current line.
1351:
1352: ssttuuffff (none)
1353: Take a character that is bound to an editing command and
1354: ``stuff'' it back into the terminal input, so it can receive
1355: special treatment by the terminal handler.
1356:
1357: ssttuuffff-rreesseett (none)
1358: ``Stuffs'' a character, then aborts input.
1359:
1360: ttrraannssppoossee-cchhaarrss (<ccttrrll-TT>)
1361: Swap the character the cursor in on, with the character to
1362: its left.
1363:
1364: uupp-hhiissttoorryy (<ccttrrll-PP>)
1365: Move to the previous line in the history buffer (if any).
1366:
1367: yyaannkk (<ccttrrll-YY>)
1368: Insert the most recently killed text back into the command
1369: string, at the point where the cursor is positioned.
1370:
1371: yyaannkk-ppoopp (<eesscc>YY)
1372: Yank a string, then replace it within the ``yank'' buffer
1373: with the next most previously killed string.
1374:
1375: ***** Example *****
1376:
1377: The following C code creates a program called sspplluurrtt.cc. It
1378: demonstrates numbered redirection of kksshh, by writing to five
1379: streams without opening them. Compile it with the command:
1380:
1381:
1382:
1383:
1384: COHERENT Lexicon Page 21
1385:
1386:
1387:
1388:
1389: ksh Command ksh
1390:
1391:
1392:
1393:
1394: cc -o splurt splurt.c
1395:
1396:
1397: To call it from the command line, you could type a command of the
1398: form:
1399:
1400:
1401: splurt 3> splurt3 4> splurt4 5> splurt5 6> splurt6 7> splurt7
1402:
1403:
1404: This will redirect the sspplluurrtt's output into files sspplluurrtt33 through
1405: sspplluurrtt77.
1406:
1407:
1408: #include <stdio.h>
1409: main()
1410: {
1411: int i;
1412: char buf[50];
1413:
1414:
1415:
1416: for(i = 3; i < 8; i++) {
1417: sprintf(buf, "For fd %d\n", i);
1418: write(i, buf, strlen(buf));
1419: }
1420: }
1421:
1422:
1423: ***** Files *****
1424:
1425: /eettcc/pprrooffiillee -- System-wide initial commands
1426: $HHOOMMEE/.pprrooffiillee -- User-specific initial commands
1427: /ddeevv/nnuullll -- For background input
1428:
1429: ***** See Also *****
1430:
1431: bbiinndd, ccoommmmaannddss, dduupp(), eennvviirroonn, eexxeecc, ffoorrkk(), ggeettooppttss, jjoobbss,
1432: kkiillll, llooggiinn, nneewwggrrpp, sseett, sshh, ssiiggnnaall(), tteesstt, wwaaiitt
1433: _I_n_t_r_o_d_u_c_t_i_o_n _t_o _s_h, _t_h_e _B_o_u_r_n_e _S_h_e_l_l, tutorial
1434:
1435: ***** Notes *****
1436:
1437: This version of kksshh offers a subset of the features of the Korn
1438: shell shipped with UNIX System V.2. It does _n_o_t offer the
1439: following features:
1440:
1441: -> vvii-style command-line editing.
1442:
1443: -> Command ffcc -ee.
1444:
1445: -> Variables RRAANNDDOOMM and PPPPIIDD.
1446:
1447:
1448:
1449:
1450: COHERENT Lexicon Page 22
1451:
1452:
1453:
1454:
1455: ksh Command ksh
1456:
1457:
1458:
1459: -> Variable arrays.
1460:
1461: -> Variable attributes other than integers.
1462:
1463: The Mark Williams version of kksshh is based on the public-domain
1464: version of the Korn shell, which in turn is based on the public-
1465: domain version of the seventh edition Bourne shell written by
1466: Charles Forsyth and modified by Eric Gisin, Ron Natalie, Arnold
1467: Robbins, Doug Gwyn, and Erik Baalbergen.
1468:
1469:
1470:
1471:
1472:
1473:
1474:
1475:
1476:
1477:
1478:
1479:
1480:
1481:
1482:
1483:
1484:
1485:
1486:
1487:
1488:
1489:
1490:
1491:
1492:
1493:
1494:
1495:
1496:
1497:
1498:
1499:
1500:
1501:
1502:
1503:
1504:
1505:
1506:
1507:
1508:
1509:
1510:
1511:
1512:
1513:
1514:
1515:
1516: COHERENT Lexicon Page 23
1517:
1518:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.